awk가 원하는 출력을 반환하지 않습니다.

awk가 원하는 출력을 반환하지 않습니다.

16번째 줄에 국가와 통화가 포함된 파일이 있습니다(awk 학습).

bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$ sed -n '16p' currencies.csv 
FIJI,Fiji Dollar

awk를 사용하여 일부 값을 추출하면 예상한 결과가 나오지 않습니다.

bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$ awk 'BEGIN{IGNORECASE=1; FS=","} /fiji/ { print NR,"-",$0 }' currencies.csv 
bartek@Lenovo-LAB:~/Desktop/bash_lessons/04/demos/Module4_Demo_Files$

왜 돌아오지 않는지16 - 피지, 피지 달러?

답변1

IGNORECASE변수는 정규식 및 문자열 연산( FS정규식의 경우 필드 분할, 자세한 awk내용은 시스템의 GNU 매뉴얼 참조)에서 대소문자 구분에 영향을 미치는 특수 변수입니다. 그러나 GNU에만 해당됩니다 awk. 다른 것들은 awk이 변수를 가지고 있지 않습니다.

당신이 말한 것에서댓글에서, 기본 설정이 GNU awk가 아닌 것 같습니다 .mawkawk

GNU가 아닌 곳에서 대소문자를 구분하지 않는 정규식 일치를 수행하려면 awk문자열을 소문자 또는 대문자로 사용하거나 변환한 다음 모두 소문자 또는 대문자로 정규식을 사용하십시오.tolower()toupper()

awk -F , 'tolower($0) ~ /fiji/ { print NR, "-", $0 }' currencies.csv
awk -F , 'toupper($0) ~ /FIJI/ { print NR, "-", $0 }' currencies.csv

grep여기에서 수행하는 작업에도 사용할 수 있습니다 .

grep -n -i 'fiji' currencies.csv

출력에는약간형식이 다르며 각 줄 앞에는 원본 파일의 줄 번호가 n:붙 습니다. n분명히 출력을 sed 's/:/ - /'.

관련 정보