我的資料檔如下所示:
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
答案2
最簡單的方法是後製合併或拉鍊方法。假設每行的最後一個字元是空格。首先根據要剪下的欄位將檔案分成兩部分。
cut -d' ' -f1-4 file > file1
cut -d' ' -f5- file > file2
其次透過後期合併合併檔案並刪除空白行。
paste -d'\n' file1 file2 | sed '/^$/d'