awk + awk에 변수 설정

awk + awk에 변수 설정

다음 간단한 bash스크립트는 (파일에서 list.txt) 줄 번호를 인쇄합니다.

function get_row

{ 
  
[[ $1 = 1 ]] &&  awk '{print $1}' list.txt
[[ $1 = 2 ]] &&  awk '{print $2}' list.txt
 
} 


get_row 1
get_row 2

하지만 좀 더 우아하게 쓰고 싶었어요.

변수 로 함수를 호출하면 변수가 값을 얻 도록 $1변수를 설정할 수 있습니까 ?awk '{print $val}'get_row 1$val1

답변1

이런 걸 원하시나요?

function get_column
{ 
    awk -v val=$1 '{print $val}' list.txt
}

$1위는 반환되어 함수에 전달되는 열 일치입니다 . $1from 함수의 줄 번호와 일치하는 줄을 인쇄 해야 하는 경우 대신 다음을 사용하세요.

function get_row
{ 
    awk -v val=$1 'NR==val{print ; exit}' list.txt
}

또는 쉘이 다음과 같이 val값을 계산 및 설정하고 값을 인쇄하도록 합니다 awk.

function get_column
{ 
    awk '{print $val}' val=$1 list.txt
}
function get_row
{ 
    awk 'NR==val{print ; exit}' val=$1 list.txt
}

여기서는 val숫자만 전달하고val다음을 포함하는 경우백슬래시문자를 이스케이프 처리하는 데 문제가 발생합니다.awk전달된 값에 대해 C 이스케이프 시퀀스를 수행 하고 -v val=쉘 변수 with는 by의 값 val="\\n"으로 변경됩니다 .\n.

답변2

당신은 그것을 사용할 수 있습니다 :

field=$1 awk '{print $ENVIRON["field"]}'

모든 POSIX 호환 시스템에서 작동하며 사용할 때 코드 삽입에 대해 걱정할 필요가 없습니다.-v val=

get_column또한 함수 이름은 get_row.

관련 정보