awkを使用してファイル名ベースのパターンを貼り付ける方法

awkを使用してファイル名ベースのパターンを貼り付ける方法

テンプレートA.tsv:

Name    data
B
C

分析するいくつかのファイルは次のとおりですB.txt

#bla
#blabla
16  LSD

そしてC.txt

#bla
#blabla
16  ARH

A.tsv他のファイルに存在するかどうかに応じてLSDOKまたは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.tsvfile に到達したらlastヘッダーを印刷し、残りの各行を確認して該当するファイル名があるかどうかを確認し、seenあれば追加しないと追加します。<tab>OK<tab>KO

関連情報