我有一个Unix文件,其中包含分号分隔的记录,如下所示,第二部分/列包含一个带有逗号分隔值的字符串,如下所示:
789651234512;TEST-10=5,TEST-136=6,TEST-3=1,TEST-4=2,TEST-5=3,TEST-9=4,TEST-9013=100
132567123784;TEST-3=1,TEST-136=5,TEST-15=4,TEST-4=2,TEST-5=3
132564013784;TEST-3=1,TEST-15=4,TEST-4=2,TEST-5=8
132496583212;TEST-13=4,TEST-136=7,TEST-23=1,TEST-6=2,TEST-5=3,TEST-4=5,TEST-6=11
我希望找到所有TEST-136=X,如果存在,其中X可以是从1到最多3位的任何整数,并像上面的示例那样返回它们:
789651234512;TEST-136=6
132567123784;TEST-136=5
132496583212;TEST-136=7
我使用的是下面的awk,但它返回了完整的第二部分/列的字符串:
awk -F'[;]' '/TEST-136/{ print $1";"$2 }' file.txt
然而,我只需要得到第一部分/列和第二部分/列的TEST-136=X部分,如上所述。
发布于 2020-11-02 21:30:54
假设每行/记录有一个匹配项。
$ awk -F';' 'match($0, /TEST-136=[[:digit:]]+/) {print $1, substr($0,RSTART,RLENGTH)}' OFS=';' kostas.txt
789651234512;TEST-136=6
132567123784;TEST-136=5
132496583212;TEST-136=7
发布于 2020-11-03 10:12:55
这可能适用于您(GNU sed):
sed -En 's/^([^;]*;).*(TEST-136=[^,]*).*/\1\2/p' file
发布于 2020-11-03 11:15:04
简单的Perl,
$ perl -F";" -lane ' /(TEST-136=\w+)/ and print "$F[0];$1" ' kostas.txt
789651234512;TEST-136=6
132567123784;TEST-136=5
132496583212;TEST-136=7
$
https://stackoverflow.com/questions/64645958
复制相似问题