문제
나는 그런 종류의 일을하고 싶다 :
for i in 1 2 3
do
gawk '{if ($i==$2) {print $0;}}' filename
done
이게 가능해?
감사해요
해결책
스크립트에 대한 두 가지 가능한 해석이 떠 오릅니다.
- 당신은 정말로 "1", "2", 그리고 "3"을 두 번째 필드로 검색하고 싶습니다.
filename
- 실제로 1'st Shell 스크립트 매개 변수를 검색하고 두 번째, ...
두 버전의 루프는 다음과 같습니다.
for i in 1 2 3; do
gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
for i in "$@"; do
gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
다른 팁
추악한 인용을 피하기 위해 Gawk의 가변 전달 기능을 사용할 수 있습니다.
for i in 1 2 3
do
gawk -v param=$i '{if (param==$2) {print $0}}' filename
done
당신이 gawk 스크립트를 원한다고 가정합니다
{if ($1 == $2 ) ... } {if ($2 == $2 ) ... } {if ($3 == $2 ) ... }
넌 할 수있어:
for i in 1 2 3 do gawk '{if ($'$i'==$2) {print $0;}}' filename done
물론 가능하지만 아마도 당신이 원하는 일을하지 않을 것입니다.
... 그것을 생각해보세요 하다 당신은 그것을 원하십니까? 당신이 쓴 내용에서는 명확하지 않습니다. 변경해야 할 한 가지는 단일 따옴표를 이중 따옴표로 바꾸는 것입니다. $i
)는 단일 크기의 문자열로 대체되지 않습니다.
제휴하지 않습니다 StackOverflow