您好我需要使用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
答案 0 :(得分:0)
这是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
答案 1 :(得分:0)
短 gawk 解决方案:
awk -v FPAT='C1;[0-9]+' '{ print $1 }' file
输出:
C1;5673
C1;52134
C1;5513
-v FPAT='C1;[0-9]+'
- 模式,定义字段值答案 2 :(得分:0)
awk '$0 !~ /C1/ {$0 = ""} {match($0,/C1;[^ ]+/);print substr($0,RSTART,RLENGTH)}' file
输出:
C1;5673
C1;52134
C1;5513
答案 3 :(得分:0)
输入
$ 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