![在 Perl 中使用 awk 打印子字符串匹配后出现的文本](https://linux22.com/image/182863/%E5%9C%A8%20Perl%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20awk%20%E6%89%93%E5%8D%B0%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D%E5%90%8E%E5%87%BA%E7%8E%B0%E7%9A%84%E6%96%87%E6%9C%AC.png)
我在一个文件中有多个字符串,如下所示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