問題は、元のファイルに0〜45行を含めることができますが、常に3に分割できることです。
コマンドを試しましたが、split -l
ファイルが生成されすぎました。誰かが私に正しい方向を伝えることを願っていますが、split
そうではありません。
15行のソースファイルの例:
lineAA|data|Format via FG|398
lineAB|data|Format via FG|398
lineAC|data|Format via FG|398
line_XA|data|Format via FG|398
line_XB|data|Format via FG|398
line_XC|data|Format via FG|398
line_ZA|data|Format via FG|398
line_ZB|data|Format via FG|398
line_ZC|data|Format via FG|398
line_XX|data|Format via FG|398
line_XY|data|Format via FG|398
line_XZ|data|Format via FG|398
line_FA|data|Format via FG|398
line_FB|data|Format via FG|398
line_FC|data|Format via FG|398
...
出力例:
ファイル1
lineAA|data|Format via FG|398
lineAB|data|Format via FG|398
lineAC|data|Format via FG|398
line_FA|data|Format via FG|398
line_FB|data|Format via FG|398
line_FC|data|Format via FG|398
ファイル-2
line_XA|data|Format via FG|398
line_XB|data|Format via FG|398
line_XC|data|Format via FG|398
ファイル-3
line_ZA|data|Format via FG|398
line_ZB|data|Format via FG|398
line_ZC|data|Format via FG|398
ファイル4
line_XX|data|Format via FG|398
line_XY|data|Format via FG|398
line_XZ|data|Format via FG|398
ベストアンサー1
アッ解決策:
awk 'BEGIN{ f=1 }!(NR%3){ n=NR+1 }NR==n{ f++ }
{ print > "STATUS_FILE-"f".txt" }!(NR%12){ f=0 }' file
BEGIN{ f=1 }
- 初期ファイルインデックス番号の設定!(NR%3)
-true
3行目ごとに計算f++
- 3行目ごとにファイルインデックス番号を増やします。!(NR%12){ f=0 }
- 12行目ごとにファイルインデックス番号をリセット(4部)print > "STATUS_FILE-"f".txt"
- 目的のファイルインデックス番号でファイルに行を印刷します。
結果を見る:
$ head STATUS_FILE*
==> STATUS_FILE-1.txt <==
lineAA|data|Format via FG|398
lineAB|data|Format via FG|398
lineAC|data|Format via FG|398
line_FA|data|Format via FG|398
line_FB|data|Format via FG|398
line_FC|data|Format via FG|398
==> STATUS_FILE-2.txt <==
line_XA|data|Format via FG|398
line_XB|data|Format via FG|398
line_XC|data|Format via FG|398
==> STATUS_FILE-3.txt <==
line_ZA|data|Format via FG|398
line_ZB|data|Format via FG|398
line_ZC|data|Format via FG|398
==> STATUS_FILE-4.txt <==
line_XX|data|Format via FG|398
line_XY|data|Format via FG|398
line_XZ|data|Format via FG|398
「独立」を創造するアッスクリプト:
split_on_4x3.awk
スクリプト内容:
#!/bin/awk -f
BEGIN { f=1 }
!(NR%3) { n=NR+1 }
NR==n { f++ }
{ print > "STATUS_FILE-"f".txt" }
!(NR%12) { f=0 }
使用法:
awk -f split_on_4x3.awk inputfile