AWK를 사용하여 항상 특정 자릿수로 출력을 인쇄하는 방법

AWK를 사용하여 항상 특정 자릿수로 출력을 인쇄하는 방법

다음 명령이 있습니다.

find . -mtime -5 -type f -exec ls -ltr {} \; | awk '{print "cp -p "$9" "$7}'

출력은 다음과 같습니다.

cp -p ./18587_96xxdata.txt 10
cp -p ./16947_96xxdata.txt 8
cp -p ./32721_96xxdata.txt 9
cp -p ./32343_96xxdata.txt 9
cp -p ./32984_96xxdata.txt 10

하지만 출력의 마지막 부분이 항상 다음과 같이 2자리가 되기를 원합니다.

cp -p ./18587_96xxdata.txt 10
cp -p ./16947_96xxdata.txt 08
cp -p ./32721_96xxdata.txt 09
cp -p ./32343_96xxdata.txt 09
cp -p ./32984_96xxdata.txt 10

다양한 변형을 시도했지만 %02d원하는 것을 얻지 못했습니다.

내가 시도한 것은 다음과 같습니다.

find . -mtime -5 -type f -exec ls -ltr {} \; | awk '{print "cp -p " $9 " "("%02d", $7)}' 

을 사용해야 합니까 printf? 그렇다면 어떻게 사용합니까?

감사합니다!

답변1

바라보다https://mywiki.wooledge.org/ParsingLs그리고https://mywiki.wooledge.org/Quotes그런 다음 다음을 수행하십시오.

$ find . -mtime -5 -type f -printf "cp -p '%p' '%Ad'\n"
cp -p './bbbb.csv' '09'
cp -p './cccc.csv' '10'
cp -p './out1.txt' '09'
cp -p './out2.txt' '05'

답변2

응, printf네 친구야. %.2d숫자를 0~2자리로 채우는 데 사용됩니다 .

find . -mtime -5 -type f -exec ls -ltr {} \; | 
    awk '{printf "cp -p %s %.2d\n", $9, $7}'

이를 설명하기 위해 원시 출력이 포함된 파일에 대해 다음 명령을 실행했습니다.

$ cat file
cp -p ./18587_96xxdata.txt 10
cp -p ./16947_96xxdata.txt 8
cp -p ./32721_96xxdata.txt 9
cp -p ./32343_96xxdata.txt 9
cp -p ./32984_96xxdata.txt 10
$ awk '{printf "%.2d\n", $NF}' file
10
08
09
09
10

아주 좋은점 참고해주세요@edmorton이 제출함. ls 구문 분석은 매우 취약합니다. Ed의 솔루션이 훨씬 좋습니다.

관련 정보