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번째 필드와 동일함을 의미하고 , 값이 전혀 없으면 현재 레코드와 동일함을 의미합니다.$
var
var
var
var
5
$var
$5
var
$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
$0
FS
awk
$
예$0
등$anything
inbash
etc는 이라는 변수의 값을 가져오는 데 사용됩니다anything
. 그런 다음$(...)
명령 대체를 위해할 수 있다이것이$
쉘의 일반적인 "값"을 의미한다고 가정해 보겠습니다.