Perl で awk を使用して、部分文字列一致の後に表示されるテキストを印刷します。

Perl で awk を使用して、部分文字列一致の後に表示されるテキストを印刷します。

以下のように、ファイルに複数の文字列がありますMyFile

1234|5|678|ABC|d|e| MyString - values: foo 1, bar 10%, baz 2/2, qux quux 10 sec, quuz 10km

1234 10 sec部分文字列の一致に基づいて部分文字列を印刷する方法qux quux

これが私が試したことです -grep -a "qux quux" MyFile | cut -d '|' -f 1,7 | awk '{print $1, " ",$13," ",$14}' |sed -e 's/|//' | sed -e 's/,//' > $output

ただし、文字列の内容が変更されると、上記のコマンドは最終的に無効な値をコピーします。

ありがとうございます。

ベストアンサー1

awkだけを使用して、以下のカンマの前のすべてのエントリをキャプチャするとします。

$ awk -F'|' -v r="qux quux " '
    match($0,r "[^,]*") {print $1, substr($0,RSTART+length(r),RLENGTH-length(r))}
  ' MyFile
1234 10 sec

GNU awk:

$ gawk -F'|' 'match($0,/qux quux ([^,]*)/,a) {print $1, a[1]}' MyFile
1234 10 sec

真珠:

$ perl -F'\|' -lne 'print "$F[0] $1" if /qux quux ([^,]*)/' MyFile
1234 10 sec

おすすめ記事