다음은 일부 파일을 나열하는 데 사용하는 명령입니다.
find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \;
-rw-r--r-- 1 qa1wrk15 test 1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys
-rw-r--r-- 1 qa1wrk15 test 1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys
-rw-r--r-- 1 qa1wrk15 test 1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys
-rw-r--r-- 1 qa1wrk15 test 1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys
등.
이제 다섯 번째 열을 합산하여 이 파일의 전체 크기를 계산하려고 합니다. 를 사용하여 이 작업을 수행하고 싶었 awk
기 때문에 특정 디렉터리에서 다음을 테스트했습니다.
>ls -lrt | awk `{ print $1 }`
ksh: syntax error at line 1 : `{' unmatched
문제가 무엇인지, 왜 이런 일이 발생하는지 이해가 되지 않습니다.문법 오류.
나는 그것을 시도하고 싶습니다
ls -lrt | awk `BEGIN {total = 0} {for(i=0;i<NR;i++){total+=$5}} END {printf "%d",total}
이것도 작동하지만 간단한 awk
스크립트는 작동하지 않습니다.
제가 틀렸거나 해결 방법이 있으면 제게 제안하거나 정정해 주세요.
답변1
'
먼저, 기울어진 작은따옴표( ) 대신 곧은 작은따옴표( ) 를 사용해야 합니다 `
.
인라인 스크립트는 awk
다음과 같습니다.
ls -lrt | awk '{ total += $5 }; END { print total }'
따라서 초기화 total
( awk
0으로 초기화), 루프가 없으며 awk
각 입력 줄에서 스크립트가 이미 실행됩니다.
답변2
@enzotib은 이미 구문 오류가 무엇인지 지적했습니다. 저는 접선을 시작하겠습니다.
숫자 목록을 합산하는 것은 계속해서 나오는 것 중 하나입니다. 나는 이 쉘 함수로 끝났습니다.
sumcol()
{
awk "{sum+=\$$1} END {print sum}"
}
이렇게 하면 솔루션이 다음과 같이 됩니다.
ls -lrt | sumcol 5
그러면 5열의 숫자를 합산하여 값이 인쇄됩니다.
답변3
다음을 사용하여 이 작업을 수행하는 또 다른 방법이 있습니다 du
.
find . -name \*.extract.sys -size +1000000c -print0 | du -c --files0-from=- | awk 'END{print $1}'
답변4
GNU 사용 find
:
find -name '*.extract.sys' -size +1000000c -printf '%s\n' | jq -s add
GNU 사용 stat
:
find . -name '*.extract.sys' -size +1000000c -exec stat -c%s '{}' + | jq -s add
BSD 사용 stat
:
find . -name '*.extract.sys' -size +1000000c -exec stat -f%z '{}' + | jq -s add