データファイルがあります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.tsv
mutation_not
mutation
A.tsv
B.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