我正在尝试清理一些数据,我最终想把它放在CSV格式中。
我已经使用了一些正则表达式来清理它,但我只是坚持一步。
我想用逗号替换除第三个换行符之外的所有换行符(\ n)。
数据如下所示:
field1
field2
field3
field1
field2
field3
等。
我需要它
field1,field2,field3
field1,field2,field3
任何人都有一个简单的方法来使用sed或awk这样做?我可以编写一个程序并使用带有mod计数器的循环来擦除每个第1和第2个换行符,但是如果可能的话,我宁愿从命令行执行它。
答案 0 :(得分:7)
使用awk:
awk '{n2=n1;n1=n;n=$0;if(NR%3==0){printf"%s,%s,%s\n",n2,n1,n}}' yourData.txt
此脚本保存最后三行并在每三行打印一次。不幸的是,这仅适用于具有3行多个的文件。
更通用的脚本是:
awk '{l=l$0;if(NR%3==0){print l;l=""}else{l=l","}}END{if(l!=""){print substr(l,1,length(l)-1)}}' yourData.txt
在这种情况下,最后三行连接在一个字符串中,只要行号不是3的倍数就插入逗号分隔符。在文件末尾,如果字符串不为空则打印该字符串删除尾随逗号。
答案 1 :(得分:5)
Awk版本:
awk '{if (NR%3==0){print $0;}else{printf "%s,", $0;}}'
答案 2 :(得分:4)
Perl解决方案,它更短,处理没有3行多个的文件:
perl -pe 's/\n/,/ if(++$i%3&&! eof)' yourData.txt
答案 3 :(得分:1)
cat file | perl -ne'chomp();打印$ _,!(++ $ i%3)? “\ n”:“,”;'
答案 4 :(得分:1)
在 Solaris 上使用 nawk 或 / usr / xpg4 / bin / awk :
awk 'ORS=NR%3?OFS:RS' OFS=, infile
答案 5 :(得分:1)
这可能对您有用:
paste -sd',,\n' file
或者这个:
sed '$!N;$!N;y/\n/,/' file
答案 6 :(得分:0)
vim版本:
:1,$s/\n\(.*\)\n\(.*\)\n/,\1,\2\r/g
答案 7 :(得分:0)
awk'{ORS = NR%3?“,”:“\ n”; print}'urdata.txt