テンプレートA.tsv
:
Name data
B
C
分析するいくつかのファイルは次のとおりですB.txt
。
#bla
#blabla
16 LSD
そしてC.txt
:
#bla
#blabla
16 ARH
A.tsv
他のファイルに存在するかどうかに応じてLSD
OKまたはKOを追加したいと思います。
Name data
B OK
C KO
\t
すべてのファイルのフィールド区切り文字はタブ文字()です。 awkでこれを行う方法は?
FILENAMEの認識から始めましたが、残りの部分についてはまったくわかりません。
template="A.tsv"
for bla in data/*.txt ; do
r="$(basename -s ".txt" $bla)"
( head -n 1 $template
awk -F'\t' -v OFS="\t" -v filename=$r [..........] >> output_final.tsv;
done
答え1
awk '
!last && /LSD/{seen[FILENAME]=1; nextfile;}
last{
if (FNR<2) print
else print $1 "\t" ( seen[$1".txt"] ? "OK" : "KO" )
}
' *.txt last=1 A.tsv
まず、Awkは設定されていないtxt
ファイルを読み取り、一致するものをlast
見つけますLSD
。見つかったら、ファイル名をseen
配列に入れます(nextfile
最適化のみ)。A.tsv
file に到達したらlast
ヘッダーを印刷し、残りの各行を確認して該当するファイル名があるかどうかを確認し、seen
あれば追加しないと追加します。<tab>OK
<tab>KO