複数のファイルを使用して特定の文字列を含む列を抽出しようとしますが、ファイルごとにフィールド区切り文字が異なり、ファイルによって文字列が異なる列に表示されます。
ファイル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彼らは複雑さよりも単純さが良いと言います。