1

私は特定の形式のすべてのファイルを検索するためにfindコマンドを使用していますが、そのコマンドはゴールデンです。その出力をawkコマンドにパイプしているので、最後のアンダースコアをフィールド区切り文字として使用したいと思います。問題は、ファイルが含まれているパスによっては、事実の前に1つまたは2つのアンダースコアが存在する可能性があることです。

find . -regex ".*prob[0-9]*_.*" | awk 'BEGIN { FS = "_.*$" } { print $1 " " $2 }'

フィールドセパレータの正規表現の何が問題になっているのかわかります。アンダースコアで区切ると考えられ、それに続くものはすべて、1文字だけを指定するためにあります。さらに、文字の最後の出現時にフィールドセパレータを具体的に使用するにはどうすればよいですか。

これは、以前に尋ねた質問の拡張です。 エコーを配管するときにStdOutへの出力を抑制します。

私が取得するファイルは一般的に次のようなものですが、ディレクトリにもアンダースコアを付けることができるという問題があります:/ the / directory / probXXXXX_XX

ここで、Xは任意の整数です。

私が考えていた回避策は、すべてのアンダースコアで区切り、次にすべての列を印刷することです...しかし、上記の方法で機能させたいと思います。

4

1 に答える 1

3

そのトリックはawk明らかではありませんが、それ$は演算子です。変数または式で使用できます。特に、事前定義された変数を含む式で使用できます。最後のフィールド、最後から2番目のフィールドを取得しNFます 。$NF$(NF - 1)

于 2012-04-25T00:11:12.033 に答える