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
결과를 shuf
bash 배열에 저장한 다음 매개변수 확장에서 대체를 사용하여 추가합니다 $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
.