awk フィールドワーク

awk フィールドワーク

フルパスを含むファイルがあります。

/home/usr/file_name_delimited_by_underscore_123.txt  
/home/usr/another_example_456.rar

拡張子なしでパスからファイル名を印刷し、その横にある最後のファイル名を印刷したいと思います_

出力:

file_name_delimited_by_underscore_123 123
another_example_456 456

パイプされたawkコマンドを使用して目的の出力を取得する方法を見つけました。

cat file | awk -F[/.] '{print $(NF-1)}' | awk -F_ '{print $0" "$NF}'

パイプを使わずにこれを達成する方法はありますか?

私の質問は、awkで解析されたフィールドでアクションを実行できますか?

ご協力ありがとうございます。

ベストアンサー1

はい、現場では好きなように何でもできます。たとえば、

$ cat file | awk -F[/.] '{n = split($(NF-1),a,/_/); print $(NF-1)" "a[n]}'
file_name_delimited_by_underscore_123 123
another_example_456 456

もちろん、これは必要ではありません。ファイルを直接読み取るcatことができます。デフォルトの出力フィールド区切り文字は空白なので、結果を文字列連結ではなく別々の出力フィールドとして作成する方が慣用的です。awkOFS

awk -F[/.] '{n = split($(NF-1),a,/_/); print $(NF-1), a[n]}' file

おすすめ記事