다른 파일을 기반으로 한 파일에서 데이터를 추출하려고합니다. file1의 하위 문자열은 file2에서 일치하는 항목을 찾기위한 색인 역할을합니다. 검색 할 문자열 file2가 공백 또는 분리되어있을 때 모두 작동하지만 awk에서 찾을 수없는 다른 필드에 조인 할 때 작동합니다. awk가 file2의 문자열의 일부와 일치하도록하는 방법이 있습니까? 작동awk with joined fields
awk -vv1="$Var1" -vv2="$var2" '
NR==FNR {
if ($4==v1 && $5==v2) {
s=substr($0,4,8)
echo $s
a[s]++
}
next
}
!($1 in a) {
print
}' /tmp/file1 /tmp/file2
예 : 파일 1 :
1 554545352014-01-21 2014-01-21T16:18:01 FS 14001 1 1.10
1 554545362014-01-21 2014-01-21T16:18:08 FS 14002 1 5.50
파일 2 :
55454535 11 17 102 850Sande Fiambre 1.000
55454536 11 17 17 238Pesc. Dourada 1.000
예를 작동하지 않습니다
파일 2를 :
5545453501/21/20142 1716:18 1 1 116:18
5545453601/21/20142 1716:18 1 1 216:18
검색 할 문자열입니다 (예 : 55454535는 실제 예제에서 일치하는 항목을 찾았지만 아래쪽 항목에는 일치하지 않습니다).
'a' 매치를'a'를 반복하는 루프로 바꾸고'~'정규 표현식을 사용하여 각 항목에 대해 매치시켜야합니다. –
awk 스크립트의 중간에서 가짜 쉘 명령'echo $ s'을 제거하십시오. awk는 그것을 빈 변수'echo'의 문자열 연결과 변수's'에 포함 된 숫자로 색인 된 필드로 봅니다. 그래서's'가'55454535'로 설정되면'$ 55454535 '. –
@ Ed Morton, 그리고 에코 $ 대신에 무엇을 사용하는 것이 좋습니다? –