こんにちは。テーブルファイルがあります(区切り記号= \t
)A.txt
。
205 toto patho
207 tata benign
208 titi likely_patho
そしてB.txt
:
210 lolo patho
211 lala benign
212 lili benign
3番目の列が「patho」または「likely_patho」の場合、2番目の列の値を印刷するファイルが必要です。この例では、次のようになります。
A toto;titi
B lolo
そのために、私は次のことをしました。
for bla in *.txt; do
r="$(basename -s ".txt" $bla)"
awk -v filename=$r '($3=="patho" || $3=="likely_patho") {print filename"\t"$2}' $bla >> result.txt ;
done
ただし、ファイルに複数の一致(たとえばA.txt
)が含まれている場合、このコードは各一致に対して1行を提供します。
A toto
A titi
B lolo
どうすれば正しい出力を得ることができますか?ありがとう
ベストアンサー1
awkを使用してください。
$ cat tst.awk
BEGIN {
split(t,tmp)
for ( i in tmp ) {
tgts[tmp[i]]
}
FS = OFS = "\t"
}
FNR == 1 {
fname = FILENAME
sub(/\.[^.]*$/,"",fname)
}
$3 in tgts {
hits[fname] = (fname in hits ? hits[fname] ";" : "") $2
}
END {
for ( fname in hits ) {
print fname, hits[fname]
}
}
$ awk -v t='patho likely_patho' -f tst.awk *.txt
A toto;titi
B lolo