[英]How to join first n lines in a file
我正在嘗試清理一些數據,我最終想把它放在CSV格式中。
我已經使用了一些正則表達式來清理它,但我堅持一步。
我想用逗號替換除第三個換行符之外的所有換行符(\\ n)。
數據如下所示:
field1
field2
field3
field1
field2
field3
等等..
我需要它
field1,field2,field3
field1,field2,field3
任何人都有一個簡單的方法來使用sed或awk這樣做? 我可以編寫一個程序並使用帶有mod計數器的循環來擦除每個第1和第2個換行符,但是如果可能的話,我寧願從命令行執行它。
用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的倍數就會插入逗號分隔符。在文件的末尾,如果字符串不為空,則打印字符串逗號刪除。
Awk版本:
awk '{if (NR%3==0){print $0;}else{printf "%s,", $0;}}'
一個Perl解決方案,它有點短,處理沒有3行多個的文件:
perl -pe 's/\n/,/ if(++$i%3&&! eof)' yourData.txt
貓文件| perl -ne'chomp(); 打印$ _,!(++ $ i%3)? “\\ n”:“,”;'
在Solaris上使用nawk或/ usr / xpg4 / bin / awk :
awk 'ORS=NR%3?OFS:RS' OFS=, infile
這可能對你有用:
paste -sd',,\n' file
或這個:
sed '$!N;$!N;y/\n/,/' file
vim版本:
:1,$s/\n\(.*\)\n\(.*\)\n/,\1,\2\r/g
awk'{ORS = NR%3?“,”:“\\ n”; print}'urdata.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.