Linuxでビッグデータファイルの列数に基づいて行を分割する方法は?

Linuxでビッグデータファイルの列数に基づいて行を分割する方法は?

私のデータファイルは次のとおりです。

1
2 4 5 6 7 19
20
22
24 26 27 
29 30 31 32 34 40 50 56 58
234 235 270 500
1234 1235 1236 1237
2300

4つ以上の列を持つ行を、それぞれ最大4つの列を含むより小さい行に分割したいと思います。したがって、出力は次のようになります。

 1
 2 4 5 6 
 7 19
 20
 22
 24 26 27 
 29 30 31 32
 34 40 50 56
 58
 234 235 270 500
 1234 1235 1236 1237
 2300

どんな提案がありますか?私の実際のデータファイルがかなり大きいことを考えてみましょう。

ベストアンサー1

そしてawk

awk '{ if(NF>4) for(i=5; i<=NF; i+=4) $i = "\n" $i } 1' file

そしてsed

sed 's/ /\n/4;T;P;D' file

そしてperl

perl -lpe '$c = 0; s/ /++$c % 4 ? " " : "\n"/goe' file

出力:

1
2 4 5 6 
7 19
20
22
24 26 27 
29 30 31 32 
34 40 50 56 
58
234 235 270 500
1234 1235 1236 1237
2300

おすすめ記事