파일 이름을 자체적으로 인쇄하는 방법

파일 이름을 자체적으로 인쇄하는 방법

foo 디렉토리에 여러 파일(100-1000)이 있습니다. 각 파일 이름을 자체 콘텐츠에 추가하고 싶습니다. 나는 for 루프가 각 파일에 임의의 문자열을 추가하는 문제를 해결해야 한다고 생각합니다.

for f in *; do printf "%10s \n" $(shuf -i 50-100 -n 50 -r) >> $f; done

뒤섞인 모든 숫자에 파일 이름을 추가하여 직접 연결하려면 어떻게 해야 합니까?

for f in *; do printf "%10s \n" $f $(shuf -i 50-100 -n 50 -r) >> $f; done

결과 파일 5:

5
67
89
69
...

예상되는 결과:

567
589
569
...

답변1

결과를 shufbash 배열에 저장한 다음 매개변수 확장에서 대체를 사용하여 추가합니다 $f.

mapfile -t shuf < <(shuf -i 50-100 -n 50)
printf '%10s \n' "${shuf[@]/#/"$f"}" >>"$f"

zsh의 경우 ^매개변수 확장을 사용합니다.

printf '%10s \n' "$f${(f)^"$(shuf -i 50-100 -n 50)"}" >> "$f"

답변2

좋습니다. 제가 착각한 것이 아니라면 인쇄하는 모든 숫자 앞에 고정 문자열을 추가하고 싶습니다 shuf. 그렇다면 해당 문자열을 형식 문자열의 시작 부분에 추가하십시오 printf.

$ printf "x%10s\n" $(shuf -i 50-100 -n 3 -r)
x        71
x        70
x        92

공백 없이 연속되도록 %10s변경 합니다 . %s마찬가지로 루프 변수를 대신 사용할 수 있습니다.

$ for f in 1 2 3; do printf "$f%s\n" $(shuf -i 50-100 -n 2 -r); done
151
197
268
256
364
354

>> "$f"파일에 리디렉션을 추가합니다 .

여기서 고정 부분은 형식 문자열의 일부이므로 모든 %기호와 백슬래시가 해석됩니다 printf.

관련 정보