awk符合条件

awk符合条件,awk,conditional-statements,Awk,Conditional Statements,我对打印第4列相同但第1列不同的行有疑问 输入: 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 8

我对打印第4列相同但第1列不同的行有疑问

输入:

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
为了理解: 我想得到的结果只为第1列,这是不同的,但有相同的第4列和相同的第2列,并打印到一行。所以对于这个例子。第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 

当您将解决问题的最佳尝试(在代码中)包括在内时,我们将为您提供最好的帮助。请更新您的Q,人们将帮助您澄清对
awk
工作原理的理解(或向您指出其他更合适的工具)。祝你好运。还有,你真的希望你的输出在一行吗?不需要在一行中得到结果。。是的,我为主要问题写了一段代码……但我对这段代码并不感到自豪。。。。