Bash:csv文件中的集中行(1 + 2,3 + 4等)
我有一个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
$ 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
几乎在那里。对我来说,它删除了第一个数字,但是为例子返回了3行(1 + 2在一行中,3和4在单行中)。 – user3550552
is is not possible with the is script,check your line endings,you might have a extra carriage return('\ r') – karakfa
这是否可能只发生非空行?它看起来像最后一个空行是Unix标准的一部分? – user3550552
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
第一种解决方案效果很好,但第二种方法似乎对我无效。有些部分似乎被切断。指定。我在一些文本字段中有一些空的字段和点。两行示例输入:1,文本,文本,,, text @ text.com,2,text.text,text和 2,文本,文本,,, text @ text.com,3,text.text,text – user3550552
@ user3550552,因为你没有在第一时间提到你的问题 – RomanPerekhrest
@ user3550552,更新你的问题与** 2nd **案例 – RomanPerekhrest
使用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
我希望开始使用一些简单的
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, - -
你是什么意思没有数字?你的输入和输出都有数字! – karakfa
刚刚更新了问题。现在希望它更清楚。 – user3550552
'xargs -L2