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
가 아닌 것 같습니다 .mawk
awk
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/:/ - /'
.