여러 변수를 사용하는 명령

여러 변수를 사용하는 명령

1GiB 이상을 차지하는 폴더의 디스크 사용량을 반환하는 명령을 얻으려고 하는데 어떻게든 명령의 두 번째 변수가 첫 번째 변수의 값만 인쇄합니다. 또한 총계 값은 열에 인쇄되지 않고 공백이 구분 기호로 포함된 일반 텍스트로 인쇄됩니다. 내가 여기서 뭘 잘못하고 있는 걸까?

OUTPUT="$(sudo ls -lah -R |awk '/^total/ {print $2}' |sort -h)"; GIGS="$(echo $OUTPUT | grep G | sed 's/G//')"; echo $GIGS

답변1

명령 대체 변수 OUTPUT의 새 줄은 echoGIGS 명령 대체를 수행할 때 토큰화될 때까지 보존됩니다. 이 시점에서 출력은 공백으로 구분된 단일 줄이 됩니다. 줄 바꿈을 유지하려면 변수를 인용하세요. GIGS 변수는거의OUTPUT 변수의 복사본 - 첫 번째 "G"가 제거되었음을 알 수 있습니다. 모든 G를 제거하려고 시도할 수 있으며, 이 경우 를 사용해야 합니다 sed 's/G//g'.

최종 결과:

OUTPUT="$(sudo ls -lah -R |awk '/^total/ {print $2}' |sort -h)"; GIGS="$(echo "$OUTPUT" | grep G | sed 's/G//g')"; echo $GIGS

또는 여러 줄로 분할합니다.

OUTPUT="$(sudo ls -lah -R |awk '/^total/ {print $2}' |sort -h)";
GIGS="$(echo "$OUTPUT" | grep G | sed 's/G//g')"; 
echo $GIGS

가능한 단순화를 위해 awk에서 더 많은 작업을 수행하는 것을 고려하십시오.

sudo ls -alhR | awk '/^total/ && /G$/ { print substr($2, 1, length($2)-1) }' | sort -n

이는 awk 일치 패턴을 확장하여 행이 'G'로 끝나도록 한 다음(grep 관리) 인쇄하기 전에 문자열에서 후행(G) 문자를 제거한 다음 sort -n결국 간단합니다.

관련 정보