2017-09-11 10 views
2

同じ4番目の列を持ちますが1番目の列が異なる行の印刷に関する質問があります。awk comaprsion with条件

INPUT:

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 

がOUTPUT:理解のために

156817 HFE HET 882745 156917 HFE HET 882745 

: 私だけ異なっている第一列、の結果を取得したいが、同じ4列目を持ち、同じ第二を持っているでしょう1列に印刷します。この例のためです。同じ第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 

しかし、それは動作しません。..

+0

問題を解決するための最良の試み(コード内)を含めると、最も効果的です。あなたのQを更新してください。人々は 'awk'がどのように動作するかを理解するのを助けます(または、他の適切なツールを指します)。がんばろう。 – shellter

+0

AND、実際に出力を1行にしたいですか? – shellter

+0

結果を1行で取得する必要はありません。はい、私は主な質問へのコードを書いていますが、私はこのコードに誇りを持っていません.... – Vonton

答えて

3

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