2017-10-28 29 views
-1

我有一个bash文件,在第一列和后面的一些文本中增加了整数。Bash:csv文件中的集中行(1 + 2,3 + 4等)

1,text1a,text1b 
2,text2a,text2b 
3,text3a,text3b 
4,text4a,text4b 
... 

我想添加行1 + 2,3 + 4等,并将结果添加到一个新的csv文件。

所需的输出将是

1,text1a,text1b,2,text2a,text2b 
3,text3a,text3b,4,text4a,text4b 
... 

第二选项而不号码将是巨大的,以及。实际的投入将是

1,text,text,,,[email protected],2,text.text,text 
2,text,text,,,[email protected],3,text.text,text 
3,text,text,,,[email protected],2,text.text,text 
4,text,text,,,[email protected],3,text.text,text 

期望的结果

text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
+0

你是什么意思没有数字?你的输入和输出都有数字! – karakfa

+0

刚刚更新了问题。现在希望它更清楚。 – user3550552

+0

'xargs -L2

回答

1
$ pr -2ats, file 

给你

1,text1a,text1b,2,text2a,text2b 
3,text3a,text3b,4,text4a,text4b 

UPDATE

第二部分

$ cut -d, -f2- file | pr -2ats, 

会给你

text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
text,text,,,[email protected],2,text.text,text,text,text,,,[email protected],3,text.text,text 
+0

几乎在那里。对我来说,它删除了第一个数字,但是为例子返回了3行(1 + 2在一行中,3和4在单行中)。 – user3550552

+0

is is not possible with the is script,check your line endings,you might have a extra carriage return('\ r') – karakfa

+0

这是否可能只发生非空行?它看起来像最后一个空行是Unix标准的一部分? – user3550552

2

AWK解决方案:

awk '{ printf "%s%s",$0,(!(NR%2)? ORS:",") }' input.csv > output.csv 

output.csv内容:

1,text1a,text1b,2,text2a,text2b 
3,text3a,text3b,4,text4a,text4b 

----------

附加的方法(跳过编号):

awk -F',' '{ printf "%s%s",$2 FS $3,(!(NR%2)? ORS:FS) }' input.csv > output.csv 

output.csv内容:

text1a,text1b,text2a,text2b 
text3a,text3b,text4a,text4b 

第三方法(用于您的扩展输入):

awk -F',' '{ sub(/^[0-9]+,/,"",$0); printf "%s%s",$0,(!(NR%2)? ORS:FS) }' input.csv > output.csv 
+0

第一种解决方案效果很好,但第二种方法似乎对我无效。有些部分似乎被切断。指定。我在一些文本字段中有一些空的字段和点。两行示例输入:1,文本,文本,,, text @ text.com,2,text.text,text和 2,文本,文本,,, text @ text.com,3,text.text,text – user3550552

+0

@ user3550552,因为你没有在第一时间提到你的问题 – RomanPerekhrest

+0

@ user3550552,更新你的问题与** 2nd **案例 – RomanPerekhrest

1

使用bash,剪切,sed和粘贴:

paste -d, <(cut -d, -f 2- file | sed '2~2d') <(cut -d, -f 2- file | sed '1~2d') 

输出:

text1a,text1b,text2a,text2b 
text3a,text3b,text4a,text4b 
0

我希望开始使用一些简单的

printf '%s,%s\n' $(<inputfile) 

这证明错了,当你有你的文字里的空格领域。 的改善是相当一个烂摊子:

source <(echo "printf '%s,%s\n' $(sed 's/.*/"&"/' inputfile|tr '\n' ' ')") 

跳过第一次提出可以在同sed命令来完成:

source <(echo "printf '%s,%s\n' $(sed -r 's/([^,]*),(.*)/"\2"/' inputfile|tr '\n' ' ')") 

编辑: 当它有特殊字符这个解决方案会失败,所以你应该使用一个简单的解决方案

cut -f2- file | paste -d, - - 
相关问题