sedまたはawkを使用して行の最初のX位置を使用してファイルを複数のファイルに分割する

sedまたはawkを使用して行の最初のX位置を使用してファイルを複数のファイルに分割する

最大2300個の部品を含む大容量のテキストファイルがあります。各セクションは前の行から始まり、行の最後にページ番号「PAGE 1」が表示されます。

例:

T5271-AX1   TITLE                             DATE
     SUB TITLE                                PAGE   1
LINE1
LINE2                                
T5271-AX1   TITLE                             PAGE   2
LINE3
LINE4
     SUB TITLE                                PAGE   3
LINE5
T5271-BX1                                     DATE
     SUB TITLE                                PAGE   1
LINE1

ファイルには最大2300のセクションがあり、各セクションの長さは数百ページにすることができますが、セクションの行の末尾には常に「PAGE 1」があります。

ファイル名は、「PAGE 1」の上の行の最初の9〜15文字の文字列に含まれています。

「PAGE 1」でファイルを分割し、出力ファイル名に9〜15文字を使用したいと思います。

私の例では、最終結果は2つのファイルになります。

T5271-AX1
T5271-BX1

ページ番号とタイトルは簡単に見つけることができますが、次に「PAGE 1」が表示されるまでファイルを分割して新しいファイルに出力する方法がわかりません。

どんな助けでも大変感謝します。

ベストアンサー1

$ cat tst.awk
/ PAGE   1$/ {
    close(out)
    split(prev,p)
    out = p[1]
}
NR > 1 { print prev > out }
{ prev = $0 }
END { print prev > out }

$ awk -f tst.awk file

$ head T*
==> T5271-AX1 <==
T5271-AX1   TITLE                             DATE
     SUB TITLE                                PAGE   1
LINE1
LINE2
T5271-AX1   TITLE                             PAGE   2
LINE3
LINE4
     SUB TITLE                                PAGE   3
LINE5

==> T5271-BX1 <==
T5271-BX1                                     DATE
     SUB TITLE                                PAGE   1
LINE1

おすすめ記事