두 개의 파일이 있고 grep을 사용하여 수행할 수 있는 bye를 찾고 싶지만 문제는 bye가 파일 1의 첫 번째 열과 일치하는 것을 찾은 후에 발생합니다.
파일 1
sss aa 0030 asa bb 0040
파일 2
Hello, goodbye sjkd askdfj al;j asa but no I dont need this sfajkld goodbye sjakdlfja sss saklfj alkjfalskj
그것은 마치
if(line has goodbye && nextline has first column in file 1) print the second column in file 1
답변1
이 시도:
awk '
NR==FNR { a[$1] = $2 ; next }
c && c-- && ($1 in a) { print a[$1] }
/goodbye/ { c = 1 }
' File1 File2
작동 원리:
NR==FNR
여기서는 첫 번째 파일을 읽을 때만 유지되는 조건입니다. 여기서는 첫 번째 필드에서 정의한 키 아래에 두 번째 필드를 저장합니다. 이 next
문을 사용하면 첫 번째 데이터 파일의 다른 후속 조건이 확인되지 않습니다.
따라서 나머지 조건은 두 번째 파일에 대해서만 확인됩니다. 일부 조건이 충족되면(두 번째 파일의 키에 따라) 첫 번째 파일에서 매핑된 값을 인쇄하려고 하며 c
(그렇다면 플래그는 0으로 감소됩니다) 현재 키 값은 다음과 같아야 합니다. been 맵에 (첫 번째 파일의) 키로 존재합니다 a
. 마지막으로, c
주어진 패턴과 일치하는 조건이 true인 경우 플래그가 설정됩니다.