用于在文件中打印特定匹配值的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