awk:異なるフィールド区切り文字を使用して別の列で機能する方法

awk:異なるフィールド区切り文字を使用して別の列で機能する方法

複数のファイルを使用して特定の文字列を含む列を抽出しようとしますが、ファイルごとにフィールド区切り文字が異なり、ファイルによって文字列が異なる列に表示されます。

ファイル1の例行(区切り:):

sss:string1:rrr

ファイル2の例行(区切り,):

sss,sss,string321,sss,sss

ファイル3の例行(区切り'):

example'e123'string2'lol

awkまたは、他のコマンドラインツールを使用して上記の3つのファイルで「文字列」をどのように見つけることができますか?

私は以下を実行できることを知っていますfile 1

awk -F: '$2 ~ /string/ {print $2}'

出力は次のとおりです。

string1

ただし、各ファイルを個別に処理するのに時間がかかるため、複数の区切り文字と複数の列を持つ複数のファイルに対してこれを行いたいと思います。できますか?

ベストアンサー1

3回の個別通話を行います。

awk -F: '{print $2}' file1
awk -F, '{print $3}' file2
awk -F\' '{print $3}' file3

おそらくこれほどスピードでしょう。

awk '
    FILENAME == "file1" && FNR == 1 {FS = ":"; col = 2; $0 = $0}
    FILENAME == "file2" && FNR == 1 {FS = ","; col = 3; $0 = $0}
    FILENAME == "file3" && FNR == 1 {FS = "'\''"; col = 3; $0 = $0}
    {print $col}
' file1 file2 file3

もちろん、電子が読んで維持するのは簡単です。

〜のようにZen of Piton彼らは複雑さよりも単純さが良いと言います。

おすすめ記事