awkを使用してファイルとリストの2つの列を比較し、一致しないパターンを印刷する方法

awkを使用してファイルとリストの2つの列を比較し、一致しないパターンを印刷する方法

データファイルがありますA.tsv(フィールド区切り記号= \t)。

id  mutation
243 siti,toto,mumu
254     
267 lala,siti,sojo
289 lala

とテンプレートファイルB.txt(フィールドの区切り文字=行と列が1つだけなので重要ではありません):

lala,siti,mumu

私はwasという新しい列を作成しA.tsv(しかし新しいファイルにあります)、リストにない列の突然変異のみを印刷したいと思います。C.tsvmutation_notmutationA.tsvB.txt

C.tsv次のようになります。

id  mutation    mutation_not
243 siti,toto,mumu  toto
254     
267 lala,siti,sojo  sojo
289 lala

私は以下を除外しようとしました。

awk 'NR==FNR {exclude[$0];next} !($0 in exclude)' file2 file1

しかし、良い結果は得られませんでした。良いアイデアがありますか?ありがとう

ベストアンサー1

awk ' BEGIN{OFS="\t"}
NR==FNR{ for(i=1; i<=NF; i++) muts[$i]; next }
FNR>1  { len=split($2, tmp, ",");
         for(i=1; i<=len; i++) buf= buf (tmp[i] in muts?"":(buf==""?"":",") tmp[i])
       }
{ print $0, (FNR==1?"mutation_not":buf); buf="" }' FS=',' fileB FS='\t' fileA

おすすめ記事