質問: "ㅏ「ENDセクションで印刷された変数には、すべての行ではなく最後に見つかった行だけがあります。
ファイル1:
pattern .........
irrelevant text
irrelevant text
pattern .........
pattern .........
irrelevant text
奇妙なコード:
awk '{ for (i=1; i<=NR; i++)
if ($i ~ /^pattern/) a+=$0
}
END {print $a}' file1
END部分でパターンのある行だけを印刷したいと思います。
ベストアンサー1
特定のパターンに一致するすべての行を収集し、最後に印刷したいようです。
あなたはこれを行うことができます
awk '/^pattern/ { a[++n] = $0 }
END { for (i = 1; i <= n; ++i) print a[i] }' file
これはa
配列として機能し、パターンに一致する各行を配列の新しい項目として追加します。最後に繰り返された項目を繰り返し、a
各項目を印刷します。
pattern
行全体の正規表現を一致させるのではなく、最初の列で正しいリテラル文字列を見つけるには、$1 == "pattern"
as条件を使用します。
しかし、これがみんなやりたいことをすれば使いやすくなります
awk '/^pattern/' file
pattern
または、最初の列のリテラル文字列と一致させたい場合
awk '$1 == "pattern"' file
これにより、パターンに一致する各行の基本操作が呼び出されます。pattern
2番目のバリアントを使用する場合は、それを最初の列として含めます。 「デフォルト動作」は行を印刷することです。
では、現在行の値を増加させるawk
算術演算となり、a += $0
数値として解釈されます。a
lineを文字列として変数に連結するには、または追加された文字列の前に改行文字を挿入する場合(デフォルト)をa
使用できます。しかし、私は何もここでやりたいことではないと思います。a = a $0
a = a ORS $0
ORS