awk는 행을 변수($PWD)와 연결할 수 없습니다.

awk는 행을 변수($PWD)와 연결할 수 없습니다.

디렉터리 목록이 포함된 파일이 있습니다.

$ cat dirs.txt
/some/path
/other/path
/some/another/one

현재 디렉토리는/home/loom

$ echo $PWD
/home/loom

$PWD다음과 같이 각 행에 추가하고 싶습니다 dirs.txt.

/home/loom/some/path
/home/loom/other/path
/home/loom/some/another/one

실패하면서 명령을 시도했습니다.

$ cat dirs.txt | awk '{print $PWD$1}'
/some/path/some/path
/other/path/other/path
/some/another/one/some/another/one

각 행을 두 배로 늘립니다. 내 문제를 해결할 수 있는 명령은 무엇입니까?


내 말은 매개변수 응답을 의미한 것이지,cat dirs.txt | awk '{print "/home/loom" $1}'

답변1

PWD은 쉘 변수이므로 awk에서 사용하는 작은따옴표 내에서 확장되지 않습니다.

awk -v pwd="$PWD" '{print pwd$1}' dirs.txt

이는 pwd awk변수를 쉘 변수의 값으로 설정한 PWD다음 각 줄의 열 1을 인쇄 dirs.txt하고 해당 값을 시작 부분에 추가합니다.

GNU awk를 사용하면 파일을 출력으로 덮어쓰는 옵션을 사용할 수 있습니다 -i inplace. 그렇지 않으면 파일을 새 파일로 리디렉션하고 필요한 경우 기존 파일을 덮어써야 합니다.

답변2

물론 이 작업을 수행하는 더 많은 방법이 있으므로 문제를 해결하기 위해 명령을 요청했으므로 다른 방법은 다음과 같을 수 있습니다.

while read -r line; do echo "${PWD}${line}"; done < "dirs"

관련 정보