파일의 패턴을 목록의 패턴으로 한 줄씩 반복적으로 교체합니다.

파일의 패턴을 목록의 패턴으로 한 줄씩 반복적으로 교체합니다.

나는 다음을 시도하고 있습니다 :

/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

관련 정보