Для цикла в Bash заменить строку в текстовом файле - PullRequest
0 голосов
/ 22 января 2019

Мне нужно сгенерировать новые файлы, изменив строку в существующем файле.

У меня есть текстовый файл с именем newheader.txt, он выглядит так:

@RG     ID:$FILENAME     SM:$FILENAME

У меня также есть текстовый файл с именем filenames.txt, который выглядит следующим образом:

ZF-150-81_S49
ZF-150-82_S55
ZF-150-83_S59

Я хотел бы, чтобы цикл for проходил по имени filenames.txt по одной строке за раз и заменял строку $ FILENAME в newheader.txt на строку в filenames.txt и превращал каждый из них в новый файл .txt. с этой строкой в ​​заголовке.

Это создаст три выходных файла. Например, первый выходной файл будет называться ZF-150-81_S49.header.txt, а внутри он должен выглядеть так:

@RG     ID:ZF-150-81_S49     SM:ZF-150-81_S49

Другими словами что-то вроде:

for $FILENAME in filename.txt; do replace $FILENAME in newheader.txt > $FILENAME.header.txt ; done

Я сделал bash для циклов, но не там, где требуется замена строки в текстовом файле. Рад за другие решения, такие как Perl, если это имеет больше смысла. Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Используйте

for f in $(cat filename.txt); do
  sed -e "s/\$FILENAME/${f}/g" newheader.txt >${f}.header.txt
done
0 голосов
/ 22 января 2019

как то так ... (не проверено)

$ while read -r f; do sed 's/$FILENAME/'"$f"'/g' header > "$f".header; done < filename.list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...