awk의 $와 쉘의 $의 차이점은 무엇입니까?

awk의 $와 쉘의 $의 차이점은 무엇입니까?

awk에서는 $(패턴 기준)로 구분된 일치하는 줄의 내용을 추출하는 데 사용합니다.IFS

awk `/LIG/{print $1, $2}' topol.top

쉘에서는 $변수에 대해 저장된 값을 추출하는 데 사용합니다. 예를 들어. for반지 모양.

for i in *; do
    mv -- $i $i.pdb; done 

(답변에 따라 수정됨)

이 두 경우의 사용법은 본질적으로 $동일합니까, 아니면 다른가요?

다르다면 왜 차이가 있는 걸까요? awk와 쉘을 혼합하는 방법은 무엇입니까 $?

답변1

$쉘과 $awk에서는 때로는 쉘 뒤에 숫자가 있을 수 있고 때로는 변수가 있기 때문에 관련이 있는 것처럼 보입니다. $awk에서도 동일하지만 어떤 식으로든 관련이 없습니다. 2개의 완전히 다른 컨텍스트에서 동일한 문자를 사용하는 2개는 완전히 다릅니다. 도구는 awk에서와 쉘에서 완전히 다른 의미를 $<number>갖습니다 .$<variable>

셸에서는 변수를 앞에 추가하여 역참조할 수 있으며 $위치 매개변수 등은 이 점에서 변수와 동일하게 처리되므로 다음을 수행할 수 있습니다.

$0 = the path to the current command
$1 = the first argument passed to the command
$2 = the second argument passed to the command
$# = the number of arguments passed to the command
$? = the exit status of the last command run
$var = the value of the shell variable var
etc.

awk 에서는 $(개념적으로) 현재 레코드가 분할되는 필드 배열의 이름이므로 다음을 수행할 수 있습니다.오직$다음 표현에 사용됩니다.

$0 = the current record being processed
$1 = the first field of the current record
$2 = the second field of the current record

awk 변수를 역참조하려면 C에서와 마찬가지로 var해당 이름을 사용하면 됩니다 var. 실제로 awk 구문은 셸보다 C와 훨씬 유사합니다.

awk에서 사용된 것을 본 경우 역참조 가 $var아니라 이름만으로 역참조하고 숫자 값(예: )이 있으면 현재 레코드의 5번째 필드와 동일함을 의미하고 , 값이 전혀 없으면 현재 레코드와 동일함을 의미합니다.$varvarvarvar5$var$5var$var$0

var=0 => $var = $0 = the current record being processed
var=1 => $var = $1 = the first field of the current record
var=2 => $var = $2 = the second field of the current record
var="" => $var = $0 = the current record being processed
var="foo" => $var = $0 = the current record being processed

Awk와 Shell은 고유한 구문, 의미, 변수 범위 등을 갖춘 완전히 다른 두 가지 도구입니다. 따라서 그것들을 그대로 취급하고 awk 스크립트에서 보는 내용이 awk 스크립트에서 보는 내용과 관련이 있다고 가정하지 마십시오. 쉘 스크립트의 구문, 의미 또는 범위 또는 그 반대.

답변2

$awk셸에서 유사하게(동일하지는 않지만) 사용되는 구문 요소일 뿐입니다 .

  • $0등은 전체 줄( ) 또는 로 구분된 줄의 해당 부분을 $1포함합니다 . 의 다른 모든 변수 이름은 있는 그대로 사용되며 필수가 아니므로 실제로 변수 이름은 다음과 같습니다.awk$0FSawk$ $0
  • $anythingin bashetc는 이라는 변수의 값을 가져오는 데 사용됩니다 anything. 그런 다음 $(...)명령 대체를 위해할 수 있다이것이 $쉘의 일반적인 "값"을 의미한다고 가정해 보겠습니다.

관련 정보