AWK 필터 결과에 BASH 변수를 사용하는 방법

AWK 필터 결과에 BASH 변수를 사용하는 방법

디렉터리 이름의 첫 문자를 가져오는 스크립트가 있는데 같은 문자로 시작하는 디렉터리 이름을 가져와서 텍스트 파일에 쓰고 싶지 않습니다. for 루프는 .txt 파일의 디렉터리 이름 목록을 반복합니다.

        for dirName in `cat $1 | tr ' ' '_' | awk '/ova/ && !/Nova/' `
        do
                firstLetter=$(echo $dirName | head -c 1)

                mkdir "/opt/SOS/$dirName"
                awk '{ print length(), $0 | "sort -n" }' $1 | cut -f 2- -d ' ' | awk -v var="$firstLetter" '$1 ~ /^ *var/' >> "/opt/SOS/$dirName/seznam-obci-stejne-pismeno.txt"

사용중입니다 도움주셔서 감사합니다Linux version 4.19.0-13-amd64 ([email protected]) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.160-2 (2020-11-28)

답변1

Awk는 내부적으로 변수를 삽입하지 않습니다 /.../. 이는 리터럴 텍스트입니다.

다음 중 하나를 선택하십시오.

awk -v letter="$firstLetter" '$1 ~ "^" letter'
awk -v letter="$firstLetter" 'index($1, letter) == 1'
awk -v letter="$firstLetter" 'substr($1, 1, 1) == letter'

기본 필드 구분 기호로 인해 awk의 필드는 공백으로 시작되지 않습니다.

관련 정보