Как я могу перебраться через каждую строку файла, используя каждую строку, чтобы заменить строку в других файлах, создавая новый Файл каждый раз

find . ! -perm /007                ### In GNU find.
1
20.01.2019, 04:04
3 ответа

Вам нужно перебрать файл подстановки, а затем зациклить целевые файлы. Я думаю, вы почти у цели. У меня есть что-то вроде следующего (Я добавил некоторые имена файлов, чтобы работало подстановочное значение):

!/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 в качестве оболочки. Затем установите счетчик iна 1. Далее globфайлы в переменную. Цикл по файлу1 и присвоение каждой строки переменной r. Затем для каждого из файлов подставьте строку 11111с тем, что мы видели в строке.Выведите его в новый файл, используя счетчик в имени, а затем увеличьте счетчик. Повторяйте, пока петли не будут сделаны.

2
27.01.2020, 23:18

Как насчет Awk? сохраните сопоставления из 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
2
27.01.2020, 23:18

Я использовал приведенный ниже скрипт для достижения того же самого

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
==========================

==

0
27.01.2020, 23:18

Теги

Похожие вопросы