파일의 각 줄을 반복하고, 매번 새 파일을 만들고, 각 줄을 사용하여 다른 파일의 문자열을 바꾸는 방법

파일의 각 줄을 반복하고, 매번 새 파일을 만들고, 각 줄을 사용하여 다른 파일의 문자열을 바꾸는 방법

다음을 포함하는 파일 1이 있습니다.

AAAAAA
BBBBBB

다음을 포함하는 파일 2가 있습니다.

11111 22222 33333

파일 3에는 다음이 포함됩니다.

22222 11111 33333

파일 1의 각 줄을 파일 2와 3에 삽입하여 "11111"을 바꾸고 매번 새 파일을 만들고 싶습니다. 따라서 최종 결과는 4개의 파일입니다.

파일 1:

AAAAAA2222233333

파일 2:

BBBBBB2222233333

파일 3:

22222AAAAAA33333

파일 4:

22222BBBBBB33333

값을 대체하기 위해 중첩된 for 루프와 sed를 사용해 보았지만 현재는 작동하지 않습니다. (디렉토리 /*에는 파일 2와 파일 3이 포함되어 있습니다.)

FILES=/directory/*
cat file1 | while read line ;do
    for f in $FILES; do

            cat $f | sed 's/11111/$i/g' > newfiles/$f$i.txt

    done

done

스크립트를 실행할 때마다 편집해야 할 파일 수가 다를 수 있으므로 디렉터리를 반복하여 모든 파일이 포함되는지 확인하고 싶습니다. 파일 1에도 다른 개수의 문자열이 있습니다.

답변1

대체 파일을 반복한 다음 대상 파일을 반복해야 합니다. 거의 다 온 것 같아요. 다음과 비슷한 것이 있습니다(와일드카드가 작동하도록 일부 파일 이름을 바꿨습니다).

!/bin/bash

i=1
FILES=./other_file*
while read r; do
    for f in $FILES; do
        sed "s/11111/$r/g" > newfiles/file$i.txt < $f
        i=$(( i + 1 ))
    done
done <file1

여기서는 먼저 bash를 쉘로 사용하고 있음을 나타냅니다. 그런 다음 카운터를 i1로 설정합니다. 다음으로 glob파일을 변수에 넣습니다. file1을 반복하고 각 행을 변수에 할당합니다 r. 그런 다음 각 파일에 대해 11111문자열을 해당 줄에 표시되는 것과 일치시킵니다. 이름에 카운터를 사용하여 새 파일로 출력한 다음 카운터를 증가시킵니다. 주기가 완료될 때까지 반복합니다.

답변2

어크는 어때? 매핑을 file1연관 배열에 저장한 다음 다른 파일의 각 줄에 대해 배열을 반복합니다.

awk -v OFS= '
  NR==FNR {t[NR]=$0; next} 
  {s = $0} 
  {
    for(i in t) {
      $0 = s; 
      sub(/11111/,t[i]); 
      $1=$1; 
      print > "newfile" ++n
    }
  }' file1 file2 file3

( OFS=그리고 $1=$1필드 사이의 공백을 제거하기 위해 빈 필드 구분 기호를 사용하여 레코드를 강제로 재평가하도록 합니다.) 결과:

$ head newfile*
==> newfile1 <==
AAAAAA2222233333

==> newfile2 <==
BBBBBB2222233333

==> newfile3 <==
22222AAAAAA33333

==> newfile4 <==
22222BBBBBB33333

답변3

나는 동일한 결과를 얻기 위해 다음 스크립트를 사용합니다.

for i in `cat mainfile`; do sed "s/11111/$i/g" file1 |sed -r "s/\s+//g" >file1_$i; sed "s/11111/$i/g" file2|sed -r "s/\s+//g" >file2_$i;done

산출

4개 파일 모두의 출력을 찾으십시오.

AAAAAA2222233333
============================
BBBBBB2222233333
============================
22222AAAAAA33333
============================
22222BBBBBB33333
==========================

==

관련 정보