나는 다음을 시도하고 있습니다 :
/dir1/textfile
/dir2/textfile
/dir3/textfile
"textfile"은 항상 동일한 내용, 즉 단순한 숫자(400)를 갖습니다.
이제 숫자가 다른 데이터 파일이 있습니다. 각 값은 새 줄에 있습니다(따라서 한 줄에 숫자 하나씩).
내가 원하는 것은 "textfile"(400)의 값을 데이터 파일의 값으로 바꾸는 것입니다. 그러나 숫자는 내 데이터 파일의 항목과 일치해야 합니다.
datafile
14
25
335
14
다음과 같이 작성해야 합니다.dir1/textfile
25
다음과 같이 작성해야 합니다.dir2/textfile
335
다음과 같이 작성해야 합니다.dir3/textfile
등...
나는 놀았 sed
지만 지금까지 어떤 해결책도 찾지 못했습니다. 어떤 아이디어가 있나요?
답변1
그리고 awk
:
awk '{print $0 > "dir"NR"/textfile"}' datafile
NR
현재 레코드 번호로 확장되므로 각 행은 에 저장됩니다.dir<line_number>/textfile
예를 들어 첫 번째 행은 에 저장되고dir1/textfile
두 번째 행은 에 저장됩니다dir2/textfile
.
while
파일 라인에 대한 값비싼 루핑이 필요하지 않으며 다음을 수행합니다.
i=1; while IFS= read -r line; do echo "$line" >dir"$i"/textfile; ((i++)); done <datafile
위의 쉘 방식은 단지 데모 방식일 뿐이므로 모두가 따라야 합니다 awk
.
의견을 바탕으로 편집:
400
모든 s를 원하는 숫자로 바꾸려면 다음을 수행하십시오 datafile
.
i=1; while IFS= read -r line; do sed "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile
파일을 제자리에서 편집하려면 다음을 수행하세요.
i=1; while IFS= read -r line; do sed -i "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile
백업 원본 파일 .bak
확장자:
i=1; while IFS= read -r line; do sed -i.bak "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile