문제

나는 그런 종류의 일을하고 싶다 :

for i in 1 2 3
do
   gawk '{if ($i==$2) {print $0;}}' filename
done

이게 가능해?

감사해요

도움이 되었습니까?

해결책

스크립트에 대한 두 가지 가능한 해석이 떠 오릅니다.

  1. 당신은 정말로 "1", "2", 그리고 "3"을 두 번째 필드로 검색하고 싶습니다. filename
  2. 실제로 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)는 단일 크기의 문자열로 대체되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top