我有一个文件,其中最后 2 列在某些行中的块数不匹配($3
有 3 个块,但有 2 个块)。$4
我怎样才能修复整个文件。谢谢
我拥有的:
162 167 4,92,4 2,19
143 164 2,4 54,32
532 843 6,4,5 43,23,53
我想要的是:
143 164 2,4 54,32
532 843 6,4,5 43,23,53
答案1
尝试
awk 'split($3,A,",") == split($4,B,",")'
根据 man awk
split(s, a [, r [, seps] ]) 将字符串 s 拆分为数组 a 和正则表达式 r 上的分隔符数组 seps,并返回字段数。
- 默认 awk 操作是隐式打印
答案2
要过滤掉第三个和第四个字段中具有不同数量的逗号分隔值的行:
awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in
该awk
函数split
将在其第三个参数(本例中为逗号)中拆分正则表达式上的给定字段,并将生成的字段存储在其第二个参数(a
此处)的数组中。我们不使用结果数组,而是使用split
也返回生成的数组条目数的 foct。
如果这些数字 (nc3
和nc4
) 相同,则将打印该行。
答案3
简单的awk方法:
awk -F"[[:space:]]+|," '!(NF%2){ print }' file
输出:
143 164 2,4 54,32
532 843 6,4,5 43,23,53
!(NF%2)
- 仅考虑具有偶数个项目的行(将空格视为,
字段分隔符)