簡體   English   中英

如何在文件中連接前n行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM