如何修复两列中块数量不匹配的问题

如何修复两列中块数量不匹配的问题

我有一个文件,其中最后 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。

如果这些数字 (nc3nc4) 相同,则将打印该行。

答案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)- 仅考虑具有偶数个项目的行(将空格视为,字段分隔符)

相关内容