我有文件abc.txt,其中包含以下数据 -
abc pqr testing, xyz=a432j42jjk4, key=124
abc pqr testing, xyz=jkl234j54nn, key=567
abc pqr testing, xyz=2395hdshkw4, key=3232
abc pqr testing, xyz=abc424729hh, key=7676
abc pqr testing, xyz=70700ghgh99, key=12342
我正在使用 awk 搜索文本“xyz”,例如 -
awk -F"xyz=" '{print $2}' abc.txt | awk '{print $1}'
这给了我带有新行的输出 -
a432j42jjk4,
jkl234j54nn,
2395hdshkw4,
abc424729hh,
70700ghgh99,
我正在寻找 awk 中的快捷方式或技巧,我可以在其中获得输出,同时从中删除换行符。
使用 GNU
grep
:grep
打印与给定正则表达式匹配的行。我们定义只打印该-o
行的匹配部分。-P
我们的正则表达式被解释为 perl 正则表达式,这给了我们更多的选择。我们的正则表达式说:
,
([^,]+
) 的字符并以,
xyz=
(?<=\bxyz=)
这被称为正向回溯)。有了\b
我们确保不 grep 之类的东西booxyz=
使用标准
awk
并假设您要在第二个逗号分隔字段中xyz=
专门查找。或者,
这会将输入视为由带有逗号分隔字段的行组成。代码的实际主体
awk
会将第二个以逗号分隔的字段拆分为 上的子字段=
,然后如果第一个恰好是字符串xyz
(包括逗号之前的初始空格),则打印其中的第二个。空行将被删除,因为
a[1]
不会在这些行上获得想要的值。您是否希望在每行输出的末尾有额外的逗号,请使用
print a[2] ","
.