複数行で1データのテキストを1行ずつに変換

linux command

 人間が見るには複数行で1データのほうが見やすいですが、データを処理するときは1行1データのほうが便利なことが多いですよね。

awkのワンライナーで変換する

 ここでは、次のような4行で1データのテキストファイルを読み込んで、1行1データになるように結合します。

 郵便番号、住所、氏名、電話番号の4行でワンセットのデータがあります。

% cat test.txt
〒110-001a
北海道知床町1丁目3-b
北海 太郎
0a0-9955-1234
〒921-002c
福岡県南九州市4丁目2-9
博多 次郎
0f0-2455-8744
〒551-003e
山梨県中央市2番5号
中央 三郎
0g0-5122-4824
%

 次のようにして、1行1データに変換します。
4行1セットなので、「NR%4」としていますが、ここは何行で1セットかによって書き換えてくださいね。

% cat test.txt | awk '{if(NR%4)ORS=",";else ORS="\n";print}'
〒110-001a,北海道知床町1丁目3-b,北海 太郎,0a0-9955-1234
〒921-002c,福岡県南九州市4丁目2-9,博多 次郎,0f0-2455-8744
〒551-003e,山梨県中央市2番5号,中央 三郎,0g0-5122-4824
%

 「ORS=”,”」のところを、「ORS=” ”」とすれば、CSVではなく、スペース区切りにすることもできます。

コメント