awk 与条件的比较

标签 awk conditional-statements

我对打印行有疑问,这些行具有相同的第四列,但第一列不同。

输入:

156817  GJB2    HET 882745
156817  ASPA    HET 882745
156817  HFE HET 882745
156917  ABCA4   HET 882745
156917  MEFV    HET 882745
156917  HFE HET 882745
228417  GJB2    HET 883590
228417  BTD HET 883590
228417  MCCC1   HET 883590

输出:

156817  HFE HET 882745 156917   HFE HET 882745

为了理解: 我只想获得第一列的结果,这些结果不同,但具有相同的第四列和相同的第二列并将其打印到一行。所以对于这个例子。第 4 列相同 (882745),但第 1 列不同(156817 和 156917),并且第 2 列 (HFE) 相同。这对我来说确实很难做到。我尝试了很多方法,但还是能得到结果。 谢谢

我所做的尝试:

awk -F'\t' -v OFS="\t" '{prev=$0; f1=$2; f2=$4; f3=$1
getline
if ($2 == f1 && $4 == f2 && $1!= f3 ) {
print prev
print }
}' file

但是这不起作用..

最佳答案

awk解决方案:

awk -F'\t' '{ k=$2 SUBSEP $3 SUBSEP $4 }
            { if((k in a) && $1!=a[k]){ printf "%s\t%s\t%s\t%s\t%s ", a[k],$2,$3,$4,$0 }
            else a[k]=$1 }END{ print "" }' file

输出:

156817  HFE HET 882745  156917  HFE HET 882745 

关于awk 与条件的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157625/

相关文章:

csv 文件 - 删除字符串中间的换行符

regex - 如何使用awk从二进制文件中提取版本号

mysql - 不同的条件选择不同的语句

c# - 动态或子句 Linq

awk - 我怎样才能有选择地 awk 一个字符串?

awk - 使用awk转换数据格式?

python 正则表达式在列表中查找匹配项

css - HTML : Using conditional comments

ruby-on-rails - rails 4/Bootstrap 3 : how to display a different navigation bar on different pages?

regex - 在linux中使用awk进行文件比较