これによりcsplit
、これらの日付を区切り文字として使用して、名前と日付の束を含むテキストファイルを分割することができました。
ファイルの例:
ファイル 'xx00':
1950
Frank
Church
James
McClure
ファイル 'xx01':
1945
Zenon
ファイル 'xx02':
1950
Bob
私がやりたいのは、同じヘッダー(年)を持つすべてのファイルを、その年をファイル名として、ヘッダーなしでマージすることです。したがって、出力は次のようになります。
ファイル「1950」:
Frank
Church
James
McClure
Bob
ファイル「1945」
Zenon
awk
ここで使用できます:
awk 'FNR==1{ header=$0;next} {print >"file"header}' filexx*
最初の行に同じヘッダーを持つファイルを連結する1つ以上の新しいファイルを生成します。
$ cat file1945
Zenon
$ cat file1950
Frank
Church
James
McClure
Bob
awk
ドキュメントからの引用を含む説明:
事前定義された組み込み変数FNR
は、現在のファイルの現在のレコード番号です。新しいレコードを読み取るたびにawk
インクリメントしますFNR
(レコードを参照)。新しい入力ファイルを開始するたびにゼロにawk
リセットさFNR
れます。したがって、実行FNR==1
する場合は、アクションを実行して、現在のファイルの最初の行であるときにその行を取得し、その内容をheader
。という変数に保存することを意味します。
このnext
ステートメントawk
は、現在のレコードの処理をただちに停止し、次のレコードに進むことを強制します。これは、現在のレコードに対してそれ以上のルールが実行されず、現在のルールの残りのアクションが実行されないことを意味します。そのため、次回FNR!=1
、これにより、出力(レコード/行)をにリダイレクトするawk
次のブロックが実行されます。(という名前のファイルは変数の値に置き換えられます。ファイル名の文字列である部分を引用符で囲む必要があることに注意してください。print
file####
####
header
ここでは、単一の ' >
'リダイレクトを使用しました。このタイプのリダイレクトを使用すると、最初の出力が書き込まれる前に出力ファイルが消去されます。同じに引き続いての書き込み出力ファイルは消去されません出力ファイルを、それに追加します。(これは、シェルスクリプトでリダイレクトを使用する方法とは異なります。)output-fileが存在しない場合は、作成されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加