awk를 사용하여 명령 목록을 작성하는 방법

awk를 사용하여 명령 목록을 작성하는 방법

test.py매개변수(입력 파일 이름)가 포함된 Python 스크립트가 있습니다. 를 test.py --arg filename사용할 수 있도록 쉘 스크립트에서 이것을 실행하고 싶습니다 awk. alist.txt각 줄에 파일 이름이 포함되어 있고 Python 코드가 이를 매개변수로 사용하고(list.txt) 각 줄을 반복하도록 하려고 합니다(예: 파일 이름)을 실행하고 .

다음 명령은 제대로 작동하지만 이 명령줄의 결과를 사용하여 매개변수에 test.py 스크립트를 포함하고 싶습니다.

awk '{print substr($0, 1, length($0)-11)}'  list.txt  

답변1

한 가지 해결책은 awk명령 출력의 각 줄을 반복하고 test.py각 줄을 인수로 호출하는 것입니다.

awk '{print substr($0, 1, length($0)-11)}' alist.txt |
while read -r; do
    test.py --arg "$REPLY"
done

또 다른 해결책은 다음을 사용하는 것입니다 xargs.

awk '...' list.txt | xargs -L1 test.py --arg

[참고: 질문에 대한 오해로 인한 대체 답변]

내 이해는 test.py --arg alist.txt당신이 원하는 것이 아니라는 것입니다:

test.py --arg (file containing the result of your awk command)

이 경우 명령 결과를 awk파일에 저장하고 해당 파일을 인수로 제공 할 수 있습니다 test.py.

awk '...' alist.txt > alist_processed_by_awk.txt
test.py --arg alist_processed_by_awk.txt
rm alist_processed_by_awk.txt

bash쉘을 사용하는 경우 또 다른 더 짧은 방법은 프로세스 대체를 사용하는 것입니다.

test.py --arg <(awk '...' alist.txt)

이는 <(command)결과가 포함된 의사 파일의 이름으로 대체됩니다 command.

관련 정보