連続したパターンのペアに基づいてファイルから行を抽出し、別々のファイルとして出力します。

連続したパターンのペアに基づいてファイルから行を抽出し、別々のファイルとして出力します。

a)特定のパターンに一致するすべての行を抽出する必要がある大容量ファイルがあります。たとえば、paternaとPatternbを考えてみましょう。したがって、^patternaのようにパターンaで始まるすべての行と、^patternbのようにパターンbで始まるすべての行を抽出する必要があります。その後、出力は Patternpatternb.txt というファイルに書き込まれます。

b)ループを使ってこれをどのように実行できますか?たとえば、パターン2とパターンb2に対して同じ操作を実行し、次にパターンa3とパターンb3に対して同じ操作を実行します。これにより、ファイルは行に一致する新しいパターンペアを使用して毎回数回解析され、最終出力は3になります。ファイル:

パターン apatternb.txt
パターン a2patternb2.txt
パターン a3patternb3.txt

入力例
001 876786989
74563734
87387


600: その他の文字
601: その他の文字

001 712345345
87238


600:特定のテキスト
702:他のテキスト

001 5342989
745632734
873872


600: その他の文字
601: その他の文字

001987345 87238


600:特定のテキスト
702:他のテキスト

モード a: ^001 モード b: 600: 一部のテキスト

出力は600:sometext.txtというファイルになります。

001 876 786
600:特定のテキスト
001 712 345
600:特定のテキスト
001 5342
600:特定のテキスト
001 987
600:特定のテキスト

実際、パターンペアの最初の要素は ^001 で、2 番目の要素はそれぞれ 3 桁の数字で始まり、次に :, スペースが続く行です。

答え1

awk '/patterna/ || /patternb/ { print > "patternapatternb.txt" }
     /patternc/ || /patternd/ { print > "patterncpatternd.txt" }
     # ... more rules following same scheme; replace with real patterns ...
     /patterny/ || /patternz/ { print > "patternypatternz.txt" }' inputfile

コードをscript.awkファイルに入れて、awk -f script.awk inputfileまたは上記のように複数行のコマンドラインを作成します。 GNU Bash シェルでは、* を使用して改行文字を挿入できます。Ctrl-V Ctrl-J

ループは1つだけです(実行による暗黙的なレコード処理ループawk)。ファイルは一度だけ通過できます。


*引用符なしで行末に新しい文字を追加する場合にのみ、Enterを使用して引用符の間に改行文字を追加できます。

関連情報