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

관련 정보