이와 같은 5개의 열이 있는 txt 파일이 있습니다.
F1 rsfldo4pw F5 ABC POG
F2 rsfcl2eou F6 ABD POF
F3 rsfceleou F7 ABG POE
ABD
열 4가 있고 열 5가 POF
위의 예와 같으면 열 2의 단어를 인쇄하는 텍스트 파일의 결과를 원합니다 rsfcl2eou
.
이 코드를 사용했는데 작동하지 않습니다. 수정하도록 도와주실 수 있나요?
'{if ( ($4=="ABD" && $5=="POF")
|| ($4=="ABG" && $5=="POE")
|| ($4=="ABK" && $5=="POJ")
|| ($4=="ABT" && $5=="POB")) print $2, "eltext" ;
else print $2;}' ${DataFile.txt} |
grep -v eltex > ${tempo.txt}
답변1
열을 기준으로 행 필터링
awk '$4 == "ABC" && $5 == "DEF" '
필드 2만 인쇄
awk '$4 == "ABC" && $5 == "DEF" { print $2} '
여러 조건으로
awk '$4 == "ABC" && $5 == "DEF" { print $2}
$4 == "XYZ" && $5 == "GHI" { print $2} '
기준과 일치하지 않는 행은 무시되며 추가 조치는 없습니다.grep -v
리디렉션 및 변수
${datafile.txt}
다음으로 확장되지 않음을 참고하세요 .datafile.txt
다음 중 하나를 사용하세요.
awk '... ' input.txt > output.txt
또는
input="Datafile.txt"
output="Exportfile.txt"
awk '...' ${input} > ${output}
특수 문자가 있는 경우 변수를 인용할 수 있습니다.
awk '...' "${input}" > "${output}"
답변2
awk '(($4 " " $5 == "ABD POF") ||
($4 " " $5 == "ABG POE") ||
($4 " " $5 == "ABK POJ") ||
($4 " " $5 == "ABT POB")) { print $2 }' DataFile.txt > exportfile.txt
이는 $4와 $5의 연결을 일치시키려는 두 개의 3자 문자열 연결과 비교하여 약간 단순화합니다.
또한 Archemar의 답변에서 중복된 코드 블록 4개 중 3개를 제거합니다(예: {print $2}
). 바라보다반복하지 마세요동일한 프로그램에서 동일한 코드의 여러 복사본을 피하는 것이 일반적으로 좋은 이유에 대한 간략한 요약입니다.
ABD 및 POE, POJ 또는 POB 등과 같이 입력에 $4와 $5의 조합이 없다고 절대적으로 확신하는 경우아니요일치시키려면 4개의 고정 문자열 일치 대신 단일 정규식 일치를 사용할 수 있습니다.
awk '$4 " " $5 ~ /^AB[DGKT] PO[FEJB]$/ {print $2}' DataFile.txt > exportfile.txt
이것은 일치합니다모두나열된 4가지 조합뿐만 아니라 AB 뒤에 D, G, K 또는 T가 따르고 PO 뒤에 F, E, J 또는 B가 오는 조합입니다.