используйте команду 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 каждых раза и запись вывода к outfile.

Таким образом, я попробовал:

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
задан 29 August 2016 в 20:14

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 команде ADDS каждое изменение во временном файле и затем однажды все изменения было внесено, мы перемещаем его в Ваш выходной файл. Если Вы хотели работать непосредственно над выходным файлом, затем делают это:

#!/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
0
ответ дан 8 December 2019 в 09:08

Другие вопросы по тегам:

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