在文件中打印特定匹配的值中的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 there is no C1;
C1;52134
C1;5513

这是awk命令将达到您的目标,

$ awk '{if($0 ~ /C1/){match($0,/C1;[^ ]+/);print substr($0,RSTART,RLENGTH)} else print ""}' file
C1;5673
C1;52134
C1;5513

简短说明,

  1. if($0 ~ /C1/):查找记录包括C1
  2. match($0,/C1;[^ ]+/):找到图案符合正则 C1;[^ ]+,起点将存储在rstart中,长度将以rllength为单位
  3. substr($0,RSTART,RLENGTH):从 RSTART打印子弦启动,长度为 RLENGTH

gawk 解决方案:

awk -v FPAT='C1;[0-9]+' '{ print $1 }' file

输出:

C1;5673
C1;52134
C1;5513

  • -v FPAT='C1;[0-9]+'-模式,定义字段值
awk '$0 !~ /C1/ {$0 = ""} {match($0,/C1;[^ ]+/);print substr($0,RSTART,RLENGTH)}' file 
  1. 在行中不存在C1并分配$ 0 ="
  2. 时检查情况
  3. 如果存在模式,我们将转到下一个块并进行处理以提取和打印C1子字符串。

输出:

C1;5673
C1;52134
C1;5513

输入

$ 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

最新更新