2009-03-12 12 views
8

データを整理しようとしていますが、最終的にはCSV形式にしたいと考えています。ファイルの最初のn行を結合する方法

私はそれをきれいにするためにいくつかの正規表現を使用しましたが、私は1つのステップで立ち往生しています。

すべての3番目の改行(\ n)を除くすべてをカンマで置き換えたいと思います。

データは次のようになります。

field1 
field2 
field3 
field1 
field2 
field3 

など。

私は誰でもSEDやAWKを使ってこれを実行するための簡単な方法を持っている

field1,field2,field3 
field1,field2,field3 
でそれを必要としますか?私はプログラムを書くことができ、1番目と2番目の改行文字をすべて消去するために改行カウンタを使ってループを使うことができますが、できるだけコマンドラインから実行したいと思います。 AWKで

答えて

7

awk '{n2=n1;n1=n;n=$0;if(NR%3==0){printf"%s,%s,%s\n",n2,n1,n}}' yourData.txt 

このスクリプトは、最後の3行を保存しておき三行目でそれらを印刷します。残念ながら、これは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行は、行の数は、AT 3の倍数でないときはいつでも挿入カンマ区切りで、単一の文字列に連結されていますファイルの末尾に、文字列が空でない場合、末尾のカンマが削除されます。

1

catファイル| perl -ne 'chomp(); $ _、!(++ $ i%3)を印刷しますか? "\ n": "、"; '

5

awkのバージョン:

awk '{if (NR%3==0){print $0;}else{printf "%s,", $0;}}' 
4
少し短くだとそれが3行の複数持たないファイルハンドル

A Perlのソリューション:

perl -pe 's/\n/,/ if(++$i%3&&! eof)' yourData.txt 
+0

良い1。私は私がそれを処理しなかったことを知っていましたが、私がこれを取った3分で解決策を見ませんでした。 – jj33

0

vimのバージョン:

:1,$s/\n\(.*\)\n\(.*\)\n/,\1,\2\r/g 
1

nawkまたは/usr/xpg4 /ビン/ Solarisの上のawk

awk 'ORS=NR%3?OFS:RS' OFS=, infile 
0

のawk '{ORS = NR%3 " "?:" \ nを";印刷}'

1

urdata.txtこれはあなたのために働くかもしれません。

paste -sd',,\n' file 

またはこの:非mulitple-の-3ファイル上の

sed '$!N;$!N;y/\n/,/' file 
関連する問題