8

一部のデータをクリーンアップしようとしていますが、最終的には CSV 形式にしたいと考えています。

いくつかの正規表現を使用してクリーンアップしましたが、1 つのステップで立ち往生しています。

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

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

field1
field2
field3
field1
field2
field3

等..

私はそれが必要です

field1,field2,field3
field1,field2,field3

誰でもsedまたはawkを使用してこれを行う簡単な方法を持っていますか? プログラムを作成し、mod カウンターを使用してループを使用して 1 番目と 2 番目の改行文字をすべて消去することもできますが、可能であればコマンド ラインから実行したいと思います。

4

8 に答える 8

7

awk を使用:

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

このスクリプトは、最後の 3 行を保存し、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 行が 1 つの文字列に連結され、行番号が 3 の倍数でない場合はカンマ区切りが挿入されます。カンマが削除されました。

于 2009-03-12T20:55:10.970 に答える
5

Awkバージョン:

awk '{if (NR%3==0){print $0;}else{printf "%s,", $0;}}'
于 2009-03-12T21:08:07.177 に答える
1

これはあなたのために働くかもしれません:

paste -sd',,\n' file

またはこれ:

sed '$!N;$!N;y/\n/,/' file
于 2012-02-24T06:45:38.433 に答える
1

猫ファイル | perl -ne 'chomp(); print $_, !(++$i%3) ? "\n" : ",";'

于 2009-03-12T21:01:50.390 に答える
0

vimバージョン:

:1,$s/\n\(.*\)\n\(.*\)\n/,\1,\2\r/g
于 2009-03-13T04:06:10.730 に答える
0

awk '{ORS=NR%3?",":"\n";print}' urdata.txt

于 2009-04-02T04:06:37.457 に答える