ファイルのパターンを一致させ、2番目の列(完全な行ではない)に一致する単語を印刷します。

ファイルのパターンを一致させ、2番目の列(完全な行ではない)に一致する単語を印刷します。

次の情報を含むファイルで「SHM」パターンを一致させ、パターンに一致する単語を印刷しようとしています。

LOCALZONE01     ASHM001002003VOL01
                BSHM001002003VOL02
                CSHM001002003VOL03
                DSHM001002003VOL03_DUP
                ESHM001002003VOL04
                FSHM001002003VOL05
                GSHM001002003VOL06_
                HSHM001002003VOL07

awkを使用して2番目の列を印刷しようとしています。

grep "SHM" <filename.txt> | awk -F" " '{print $2}'

ASHM001002003VOL01

列1を印刷しようとすると、次の結果が出力されます。

LOCALZONE01
BSHM001002003VOL02
CSHM001002003VOL03
DSHM001002003VOL03_DUP
ESHM001002003VOL04
FSHM001002003VOL05
GSHM001002003VOL06_
HSHM001002003VOL07

以下は私が望む出力です。どうやって入手できますか?

ASHM001002003VOL01
BSHM001002003VOL02
CSHM001002003VOL03
DSHM001002003VOL03_DUP
ESHM001002003VOL04
FSHM001002003VOL05
GSHM001002003VOL06_
HSHM001002003VOL07

ベストアンサー1

GNU grepが利用可能な場合、

grep -Eo '[[:alnum:]_]*SHM[[:alnum:]_]*' < filename.txt

そうでない場合は、各行のフィールドを繰り返してSHMを見つけるようにawkに要求できます。

awk '{ for(i=1;i<=NF;i++) if ($i ~ /SHM/) print $i }' < filename.txt

おすすめ記事