이것은 일부 파일을 나열하는 데 사용하는 명령입니다.
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
스크립트가 작동하지 않습니다.
내가 틀렸거나 해결 방법이 있으면 알려주십시오.
답변
우선 '
, 기울어 진 따옴표 ( )가 아닌 직선 따옴표 ( ) 를 사용해야합니다 `
.
awk
인라인 스크립트는 다음과 같이 될 수있다 :
ls -lrt | awk '{ total += $5 }; END { print total }'
따라서 초기화 할 필요가 없으며 total
( awk
0으로 초기화) 루프 할 필요가 없으며 awk
모든 입력 줄에서 이미 스크립트를 실행합니다.
답변
@enzotib는 이미 구문 오류가 무엇인지 지적했습니다. 조금 접하게됩니다.
숫자 열을 합산하는 것이 계속 나타나는 것 중 하나입니다. 이 셸 함수로 끝났습니다.
sumcol()
{
awk "{sum+=\$$1} END {print sum}"
}
이를 통해 솔루션은 다음과 같습니다.
ls -lrt | sumcol 5
열 5의 숫자를 합산하고 값을 인쇄합니다.
답변
다음을 사용하여이를 수행하는 다른 방법이 있습니다 du
.
find . -name \*.extract.sys -size +1000000c -print0 | du -c --files0-from=- | awk 'END{print $1}'
답변
HP-UX find
에 -printf
옵션이있는 경우 다음 bc
과 같은 계산 공식을 작성하는 데 유용합니다 .
( find . -name \*.extract.sys -size +1000000c -printf '%s+'; echo 0 ) | bc
수식이 너무 커지면 단계별로 계산할 수 있습니다.
( find . -name \*.extract.sys -size +1000000c -printf 's+=%s\n'; echo s ) | bc
답변
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