用于在文件中打印特定匹配值的awk参数
您好,我需要使用用于在文件中打印特定匹配值的awk参数,awk,Awk,您好,我需要使用awk重新排列我的数据文件。以下是我的数据示例: A1;1234 B1;4556 C1;5673 D1;0987 A1;1524 B1;8545 D1;81535 A1;2035 C1;52134 D1;95412 B1;5135 C1;5513 D1;5722 如果我只想在只包含C1的字段上打印数据;如何在awk上执行此操作 预期产出: C1;5673 <------ "This line is really blank since ther
awk
重新排列我的数据文件。以下是我的数据示例:
A1;1234 B1;4556 C1;5673 D1;0987
A1;1524 B1;8545 D1;81535
A1;2035 C1;52134 D1;95412
B1;5135 C1;5513 D1;5722
如果我只想在只包含C1
的字段上打印数据;如何在awk上执行此操作
预期产出:
C1;5673
<------ "This line is really blank since there is no C1;
C1;52134
C1;5513
C1;5673
以下是awk
命令可以实现您的目标
$ awk '{if($0 ~ /C1/){match($0,/C1;[^ ]+/);print substr($0,RSTART,RLENGTH)} else print ""}' file
C1;5673
C1;52134
C1;5513
简要说明
if($0~/C1/)
:查找包含C1的记录
match($0,/C1;[^]+/)
:找到符合正则表达式的模式C1;[^]+
,起点将存储在RSTART中,长度将以RLENGTH为单位
substr($0,RSTART,RLENGTH)
:打印从RSTART
开始的子字符串,其长度为RLENGTH
Shortgawk解决方案:
awk -v FPAT='C1;[0-9]+' '{ print $1 }' file
输出:
C1;5673
C1;52134
C1;5513
-v FPAT='C1;[0-9]+'
-模式,定义字段值
检查行中不存在C1时的情况并分配$0=“”
如果模式存在,我们将转到下一个块并进行处理以提取和打印C1子字符串
输出:
C1;5673
C1;52134
C1;5513
输入
输出
$ awk '{ print match($0, /C1;[0-9]+/) ? substr($0,RSTART,RLENGTH) : ""}' file
C1;5673
C1;52134
C1;5513
非常感谢你!这个很好用!谢谢你的帮助help@terence,很高兴能帮上忙。请设置接受答案的复选框。感谢Ramakanth Putta的支持,这也很好。几乎与我的答案相似。。非常感谢你的帮助!非常感谢您的支持!
$ cat file
A1;1234 B1;4556 C1;5673 D1;0987
A1;1524 B1;8545 D1;81535
A1;2035 C1;52134 D1;95412
B1;5135 C1;5513 D1;5722
$ awk '{ print match($0, /C1;[0-9]+/) ? substr($0,RSTART,RLENGTH) : ""}' file
C1;5673
C1;52134
C1;5513