4つのフィールドを使用してawkとUNIXを使用して2つのファイルで共通行を検索する

4つのフィールドを使用してawkとUNIXを使用して2つのファイルで共通行を検索する

2つのファイルがあります。 file1とfile2のフィールド1、2、4、5の両方が一致する場合は、出力ファイルにfile1とfile2の行全体を印刷したいと思います。

ファイル1:

sc2/80         20      .        A       T         86   F=5;U=4
sc2/60         55      .        G       T         76   F=5;U=4 
sc2/68         20      .        T       C         71   F=5;U=4
sc2/24         24      .        T       G         31   F=5;U=4

ファイル2:

sc2/99         84      .        C       G         61   F=5;U=4
sc2/80         20      .        A       T         30   F=5;U=4
sc2/60         40      .        G       T         76   F=5;U=4 
sc2/30         20      .        T       C         71   F=5;U=4
sc2/24         24      .        T       G         91   F=5;U=4

予想出力:

sc2/80         20      .        A       T         86       F=5;U=4
sc2/80         20      .        A       T         30       F=5;U=4
sc2/24         24      .        T       G         31       F=5;U=4
sc2/24         24      .        T       G         91       F=5;U=4

私はこの分野に初めてアクセスし、助けてくれてありがとう。

ベストアンサー1

多次元配列を使用できます。

awk 'FNR==NR{a[$1,$2,$4,$5]=$0;next}{if(b=a[$1,$2,$4,$5]){print b;print}}' file1 file2

FNRNR(ファイルレコード数)は、awkが最初のファイルを処理したときの値と同じです。

a[$1,$2]=$0a[$1 SUBSEP $2]=$0or と同じでa[$1"\034"$2]=$0($1,$2)in aor と同じです。($1 SUBSEP $2)in a($1"\034"$2)in a

のように.ifif(b=a[$1,$2,$4,$5]){print b;print}に置き換えることもできます。if(($1,$2,$4,$5)in a){print a[$1,$2,$4,$5];print}!("index" in a)a["index"]a["index"]=""

おすすめ記事