xargs 명령에서 두 개의 파일 열을 변수로 사용

xargs 명령에서 두 개의 파일 열을 변수로 사용

awk/xargs를 학습하는 동안 일부 파일의 이름을 바꾸려고 합니다. 나는 두 개의 열이 있는 파일을 제공하는 명령을 관리했습니다. 첫 번째 열은 이름을 바꾸려는 파일의 이름이고 두 번째 열은 파일이 끝나야 하는 이름입니다.
파일 내용을 어떻게 분할합니까(바람직하게는 awk/xargs와 같은 프로그램 사용).각 열을 변수로 사용?

주문하다

echo "foto1.JPG
foto2.JPG
foto3.JPG" | \
gawk '{ count++ }{ print $0 " " strftime("%y-%m-%d") "_" count ".JPG" }'  

산출

foto1.JPG 21-11-09_1.JPG                                                
foto2.JPG 21-11-09_2.JPG
foto3.JPG 21-11-09_3.JPG

이게 제가 원하는데, 그 결과를 어떻게 분리해서 활용하는지 모르겠습니다. 나는 노력했다

echo "foto1.JPG
foto2.JPG
foto3.JPG" | \                                                          
gawk '{ count++ }{ print $0 " " strftime("%y-%m-%d") "_" count ".JPG" }' | \
xargs -I% echo renaming $(echo % | awk '{ print $1 }') to $(echo % | awk '{ print $2 }') "..."

하지만 그것은 출력

renaming foto1.JPG 21-11-09_1.JPG to ...                                                      
renaming foto2.JPG 21-11-09_2.JPG to ...
renaming foto3.JPG 21-11-09_3.JPG to ...

이것이 나와 충돌하는 이유는

echo renaming $(echo foo bar | awk '{ print $1 }') to $(echo foo bar | awk '{ print $2 }') "..."

나에게주세요

renaming foo to bar ...

그리고

echo "foto1.JPG
foto2.JPG
foto3.JPG" | \
gawk '{ count++ }{ print $0 " " strftime("%y-%m-%d") "_" count ".JPG" }' | \
xargs -I% echo this line has % in it

산출

this line has foto1.JPG 21-11-09_1.JPG in it
this line has foto2.JPG 21-11-09_2.JPG in it
this line has foto3.JPG 21-11-09_3.JPG in it

%using 문 내부에 문제가 있는 것 같습니다 $( ... ).

답변1

-IAFAIK의 일부로 전달된 자리 표시자의 내용을 분할할 수 없습니다 . 여기서 개별 인수를 처리하려면 셸 컨텍스트를 도입해야 합니다.

xargs -L1 sh -c 'renaming "$1" to "$2"' "$0"

이 플래그는 -L1파이프로 연결된 출력의 여러 줄을 한 번에 하나씩 가져와서 내용을 실행하고 전체 줄을 인수로 전달합니다.xargssh -c '..'


그런데, 고유한 줄 번호를 추적하기 위해 별도의 변수가 필요하지 않습니다 counter. awk는 NR다음과 같이 사용할 수 있는 변수의 현재 줄 번호를 업데이트했습니다 .

gawk '{ print $0 " " strftime("%y-%m-%d") "_" NR ".JPG" }'

관련 정보