4つのファイルのいずれかを一度に3行に分割できますか?

4つのファイルのいずれかを一度に3行に分割できますか?

問題は、元のファイルに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)- true3行目ごとに計算

  • 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

おすすめ記事