file.txt
2개의 스크립트 가 있고file2.txt
파일 1.txt
|col1|col2|
|name|mandatory|
|age|mandatory|
|address|mandatory|
|email|mandatory|
|country|not-mandatory|
파일 2.txt
|col1|col2|
|name|gabrielle|
|age||
|address|nashville|
|email|[email protected]|
|country||
해당 열이 강제 적용되는 file1의 모든 행을 가져오려면 임시 파일을 만들어야 합니다. 그런 다음 file2에 언급된 필수 필드가 비어 있는지 확인해야 합니다.
예상 출력:
age mandatory
답변1
다음을 사용할 수 있습니다 awk
.
awk -F '|' '
NR==FNR && $3=="mandatory" {m[$2]++}
NR>FNR && $3=="" && m[$2] {printf "%s mandatory\n", $2}
' file1.txt file2.txt
산출
age mandatory
설명하다
awk
두 파일의 각 줄을 반복합니다. 레코드 구분 기호가 고려됩니다 |
. 이는 첫 번째 필드가 항상 비어 있음을 의미합니다.
file1.txt
스크립트의 첫 번째 줄은 세 번째 필드 ( 지금까지 읽은 레코드 수는 현재 파일의 줄 번호와 일치함) NR
가 있는 줄을 찾고 mandatory
두 번째 필드를 배열에 저장합니다.
스크립트의 두 번째 줄은 줄 file2.txt
(현재 파일의 줄 번호보다 읽은 레코드 수)을 찾고, 세 번째 필드가 비어 있고 이전에 만든 목록에 있으면 첫 번째 필드의 이름을 인쇄합니다.