AWK: INPUT.txt의 마지막 열에 대한 TABLE 텍스트를 검색하고 해당 열을 INPUT.txt에 추가합니다.

AWK: INPUT.txt의 마지막 열에 대한 TABLE 텍스트를 검색하고 해당 열을 INPUT.txt에 추가합니다.

여러분, 저는 이와 같은 INPUT.txt를 가지고 있습니다(마지막 열 참조).

INPUT.txt
63 M 27 BS/BA TEHRANI 3 4 298320 310050 11730 j j
63 M 27 BS/BA TEHRANI 3 4 310050 311430 1380 ( a
63 M 27 BS/BA TEHRANI 3 4 311430 312080 650 ] ]

그리고 이와 같은 두 개의 테이블 텍스트가 있습니다. 두 개의 열이 있습니다.

TABLE1.txt
j feat1
a feat2
.
.
.

그리고

TABLE2.txt
j sp1
a sp2
.
.

INPUT.txt에 두 개의 열을 추가하고 싶습니다. INPUT.txt의 마지막 열에 대한 TABLE 텍스트를 검색하고 해당 열을 INPUT.txt에 추가합니다. (j feat1 sp1과 같은 테이블을 병합하는 것이 가능하다고 생각합니다.) 이렇게 출력합니다.

output.txt
CodeGender Age Grade Dialect Session Sentence Start End Length Phonemic     Phonetic feat sp
63 M 27 BS/BA TEHRANI 3 4 298320 310050 11730 j j feat1 sp1
63 M 27 BS/BA TEHRANI 3 4 310050 311430 1380 ( a feat2 sp2
63 M 27 BS/BA TEHRANI 3 4 311430 312080 650 ] ]
.
.
.

답변1

GNU awk가 있는 경우 NR==FNR {a[$1]=$2; next} $NF in a {print $0, a[$NF]}다음 수정 사항을 적용하여 정식 다차원 버전을 사용할 수 있습니다.

  1. 이 트릭을 사용하여 조회 테이블을 작성할지 아니면 사용할지 결정할 수 없으며 NR==FNR처리된 파일 수를 계산해야 합니다.

  2. 기본 인덱스를 명시적으로 반복하고 각 하위 배열의 키가 일치하는지 테스트해야 합니다.

전임자.

gawk '
  BEGINFILE{k++}
  k<3 {a[k][$1]=$2; next} 
  {nf = NF; for (l in a) {if ($nf in a[l]) {$(NF+1) = a[l][$nf]}}}
  {print}
' TABLE1.txt TABLE2.txt INPUT.txt 

63 M 27 BS/BA TEHRANI 3 4 298320 310050 11730 j j feat1 sp1
63 M 27 BS/BA TEHRANI 3 4 310050 311430 1380 ( a feat2 sp2
63 M 27 BS/BA TEHRANI 3 4 311430 312080 650 ] ]

열 헤더가 필요한 경우 BEGIN규칙에서 인쇄하세요.

답변2

이것을 시도해 볼 수도 있습니다.

awk '
FILENAME!=fn{
  a[$1]=a[$1]FS$2
  next
}
$NF in a{
  $0=$0a[$NF]
}
1
' fn='INPUT.txt' TABLE1.txt TABLE2.txt INPUT.txt

답변3

저는 2단계로 했어요

1 단계

awk 'FNR==NR{a[FNR]=$2;next};{$(NF + 1)=a[FNR]}1' file1 input.txt  >> final_final.txt

2 단계

awk 'FNR==NR{a[FNR]=$2;next};{$(NF + 1)=a[FNR]}1' file2 final_final.txt

산출

63 M 27 BS/BA TEHRANI 3 4 298320 310050 11730 j j feat1 sp1
63 M 27 BS/BA TEHRANI 3 4 310050 311430 1380 ( a feat2 sp2
63 M 27 BS/BA TEHRANI 3 4 311430 312080 650 ] ]

관련 정보