# test.txt 파일 내용 확인
cat test.txt
john 12345
jane 67890
# test.txt 파일에서 두번째 항목($2)이 12345일 경우 행 전체 출력(print $0)
awk '{ if ($2=="12345") print $0 }' test.txt
john 12345
# 두번째 항목이 12345일 경우 첫번째 항목만 출력(print $1)
awk '{ if ($2=="12345") print $1 }' test.txt
john
# 두번째 항목이 12345가 아닐 경우 행 전체를 출력
awk '{ if ($2!="12345") print $0 }' test.txt
jane 67890
만약 항목 구분자를 지정하고 싶다면 -F 옵션을 추가하면 된다.
# test2.txt 파일 내용 확인
cat test2.txt
john:12345
jane:67890
# 구분자는 ":", test2.txt 파일에서 두번째 항목이 12345일 경우 행 전체 출력
awk -F ':' '{ if ($2=="12345") print $0 }' test2.txt
john:12345
정확히 일치하는 문자열이 하니라 특정 문자열을 포함하는지 여부를 확인하려면 awk에서 제공하는 함수인 index()를 이용하면 된다. 형식은 index(in_str, find_str), 문자열 in_str에 find_str이 포함되는지 검색해서 일치하는 부분이 있으면 0이 아닌 값(nonzero)을, 없으면 0을 리턴한다. find_str 부분에 정규표현식(regular expression)을 사용할 수 없다는 점에 유의하자.
아래의 예시를 보자. awk 명령의 if 조건문 안에서 index 함수를 호출한 후 리턴값이 0이 아닌지 확인하는 방식으로 문자열 포함 여부를 판단할 수 있다.
# test.txt 파일에서 두번째 항목에 678이 포함되어 있으면 행 전체 출력
awk '{ if (index($2,"678")!=0) print $0 }' test.txt
jane 67890
검색하고자 하는 문자열이 스크립트에서 변수에 할당되어 있을 경우엔 -v 옵션을 추가하면 된다.
target_str="678"
# target_str 변수에 저장된 문자열이 test.txt 파일에서 두번째 항목에 포함되어 있으면 행 전체 출력
awk -v fstr="$target_str" '{ if (index($2, fstr)!=0) print $0 }' test.txt
jane 67890
위의 예시에 대해 간략히 설명하자면, 변수 target_str에 저장된 문자열을 awk의 -v 옵션을 이용해서 내부 변수 fstr을 선언하여 복사한 후에 index() 함수에 적용했다.
awk 활용에 대한 다른 게시물들은 여기로
덧글
awk '$2 ~ /IN000/ { print $1 }' my_file.txt | tr 'n' ' '
my_file.txt에서 두번째 단어($2)에 "IN000"이 있으면 첫번째 단어( $1)를 출력하고, tr을 이용해서 줄바꿈을 공백으로 바꿨습니다.
tr에 대한 내용은 아래의 링크를 참고하시기 바랍니다.
http://bahndal.egloos.com/547759
중간에
"awk -F ':' '{ if ($2==12345") print $0 }' test2.txt" 여기서 12345 앞에 " 부호가 하나 빠져있어요.