템플릿 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