awk를 사용하여 변수에 크기를 쓰고 싶지만 항상 0으로 유지됩니다.

awk를 사용하여 변수에 크기를 쓰고 싶지만 항상 0으로 유지됩니다.

다음 표현식을 사용하여 변수에 숫자를 쓰고 싶지만 val=$(ls -al $1 | awk -v a=$i '{if( NR == a ) print $5}') 모든 i에 대해 비슷한 표현식으로 0을 반환하므로 문제 없이 파일 이름을 씁니다.

답변1

현재 디렉터리의 다섯 번째 이름을 인쇄하려는 것 같습니다.

올바른 방법은

shopt -s dotglob
set -- *
printf '%s\n' "$5"

*이는 확장된 파일 이름 와일드카드 패턴에 의해 생성된 목록 으로 위치 매개변수를 설정합니다 ( dotglob셸 옵션도 설정했기 때문에 숨겨진 이름 포함). 다섯 번째 위치 매개변수는 $5사전순으로 5번째 위치에 이름을 보관합니다. 디렉토리에 5개 미만의 이름이 포함되어 있으면 위의 명령은 빈 줄을 인쇄합니다.

이름에 공백, 탭 또는 줄 바꿈이 포함되어 있는지는 중요하지 않습니다.

변수에 이름을 지정하려면 다음을 사용하십시오.

val=$5

현재 디렉토리가 아닌 다른 디렉토리의 내용에서 이름을 선택하고 디렉토리라고 말한 $dir다음 "$dir"/*패턴으로 사용하시겠습니까?

이름이 아닌 파일 크기를 원하면 stat다음을 사용하십시오.

stat -c %s "$5"

또는 변수에 할당하려면

val=$( stat -c %s "$5" )

위의 내용은 GNU를 가정 stat하고 파일 크기를 바이트 단위로 제공합니다(존재한다고 가정).

위치 매개변수를 중단하는 대신 명명된 배열을 사용하려면 다음을 사용하세요.

names=( "$dir"/* )

"${names[4]}"그런 다음 (배열은 쉘의 인덱스 0에서 시작)을 사용하여 다섯 번째 이름을 얻습니다 bash.

관련 정보