次の行を含む多くのコンテンツを含むテキストファイルがあるとします。
...
...
ABCD1 1234 12345
XYZ
foo bar 1234597890
...
DEFG2 5678 56789
XYZ
foo bar 0987654321
...
...
を使用してデータシリーズを抽出して検索する必要がありますgrep -C1 "XYZ"
。今私がすべきことは、次の出力を組み合わせることです。
ABCD1 1234567890 12345 1234
DEFG2 0987654321 56789 5678
grep -z "XYZ"
「無関係」の行を削除し、行awk
からデータを抽出して目的の方法で組み合わせることができることを知っています。しかし、私が見逃したものは、一致する行のプラス記号の前にある行をどのように削除できますか/n
?では、1行から次の行にデータをパイプできますか?grep
grep
awk
答え1
ですべての操作を実行する方がエレガントですが、素早く汚れたawk
作業をしたい場合は、awk
レコード区切り記号をgrep
グループ区切り記号と同じに設定してから、必要なスペース区切り文字を任意の順序で印刷できます。
grep -C1 XYZ file | awk -vRS='\n--' '{print $1, $NF, $3, $2}'
ABCD1 1234597890 12345 1234
DEFG2 0987654321 56789 5678