Используйте команду sed с переменной

Я хотел бы удалить все строки, содержащие определенную строку, а также следующие 3 строки.

Я могу использовать команду sed, чтобы сделать это легко при использовании одной строки:

sed '/HISEQ:243:C9FH7ANXX:4:2202:4922:44902/,+3 d' ../input/infile.fq_1 > ../output/outfile.fq_1

Версия с двойными кавычками также работает:

sed "/HISEQ:243:C9FH7ANXX:4:2202:4922:44902/,+3 d" ../input/infile.fq_1 > ../output/outfile.fq_1

Тем не менее, я хотел бы использовать много строк. Каждая строка представляет собой строку в текстовом файле с именем strings.txt, и я хотел бы сопоставлять по одной строке за раз, удаляя строки, совпадающие в infile, а также в следующие 3, каждый раз и записывая выходные данные в выходной файл.,

Итак, я попробовал:

cat strings.txt | while read LINE
do
sed '/$LINE/,+3 d' ../input/infile.fq_1 > ../output/outfile.fq_1
done

Но переменная не распознается одинарными кавычками. Если я использую двойные кавычки:

cat strings.txt | while read LINE
do
sed "/$LINE/,+3 d" ../input/infile.fq_1 > ../output/outfile.fq_1
done

Это тоже не работает.

Я также попробовал все виды вариаций, такие как использование фигурных скобок или использование обоих типов кавычек:

cat strings.txt | while read LINE
do
sed '/'"$LINE"'/,+3 d' ../input/infile.fq_1 > ../output/outfile.fq_1
done

Но, похоже, ничего не работает. Помощь будет высоко ценится!

1 ответ

Решение

Проблема здесь в том, что вы продолжаете перезаписывать свой выходной файл каждый раз через цикл. Попробуй это:

#!/bin/bash

cp ../input/infile.fg_1 temp

while read line; do
   sed -i "/$line/,+3 d" temp
done < strings.txt

mv temp ../output/outfile.fg_1

Команда -i в команде sed ДОБАВЛЯЕТ каждое изменение во временный файл, а затем после внесения всех изменений мы перемещаем его в ваш выходной файл. Если вы хотите работать непосредственно с выходным файлом, сделайте это:

#!/bin/bash

cp ../input/infile.fg_1 ../output/outfile.fg_1

while read line; do
   sed -i "/$line/,+3 d" ../output/outfile.fg_1
done < strings.txt
Другие вопросы по тегам