다음 간단한 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
$val
1
답변1
이런 걸 원하시나요?
function get_column
{
awk -v val=$1 '{print $val}' list.txt
}
$1
위는 반환되어 함수에 전달되는 열 일치입니다 . $1
from 함수의 줄 번호와 일치하는 줄을 인쇄 해야 하는 경우 대신 다음을 사용하세요.
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
.