2017-02-21 26 views
1

Я хочу найти файл и добавить \ 1 в конец каждой строки, начинающейся с @. Одна проблема - grep не нравится «\ 1». Это несколько строк о том, как выглядит файл:Как добавить символ в определенные строки с помощью grep/awk/sed

@SRR1248080.1 1 length=90 
TCTCACTGGCTGACTGAAGGCATGTCTAGTATTCAGAGTTTGCTACGATTTGGTACCGCTTTCGCAGCCC 
GCACCGAAACAGTGCTTTACCCCTAGACAGCTCATAGTCAACCGCTGCGCCTCAACGCATTTCGGGGAGA 
ACCAGCTAGCTCCGAGTTCGATTGGTATTTCACCCCTAACCACAGCTCATCCGCTGATTTTTCAACATCA 
@SRR1249238.1 1 length=173 
GCACCGAAACAGTGCTTTACCCCTAGACAGCTCATAGTCAACCGCTGCGCCTCAACGCATTTCGGGGAGA 
ACCAGCTAGCTCCGAGTTCGATTGGTATTTCACCCCTAACCACAGCTCATCCGCTGATTTTTCAACATCA 

Я хотел бы, чтобы прочитать:

@SRR1248080.1 1 length=90\1 
TCTCACTGGCTGACTGAAGGCATGTCTAGTATTCAGAGTTTGCTACGATTTGGTACCGCTTTCGCAGCCC 
GCACCGAAACAGTGCTTTACCCCTAGACAGCTCATAGTCAACCGCTGCGCCTCAACGCATTTCGGGGAGA 
ACCAGCTAGCTCCGAGTTCGATTGGTATTTCACCCCTAACCACAGCTCATCCGCTGATTTTTCAACATCA 
@SRR1249238.1 1 length=173\1 
GCACCGAAACAGTGCTTTACCCCTAGACAGCTCATAGTCAACCGCTGCGCCTCAACGCATTTCGGGGAGA 
ACCAGCTAGCTCCGAGTTCGATTGGTATTTCACCCCTAACCACAGCTCATCCGCTGATTTTTCAACATCA 
+1

'sed '/^@/s/$/\\ 1 /' file' или' awk '/^@/{$ 0 = $ 0 "\\ 1"} 1' file' –

+1

По крайней мере, в sed обратная косая черта один имеет особое значение. Он относится к первому «нумерованному сохранению» или «регистру» или «обратной ссылке». Если вы его не определите, он не будет знать, что делать. Попробуйте выполнить обратную косую черту с другой косой чертой. –

ответ

3

Добавление \1 в конце каждой строки, которая начинается с @ хлеб & масло для sed. Вы просто указать регулярное выражение соответствия строки для изменения, и вы можете использовать s команды подразделов в хвосте в конце нулевой длины строки:

sed '/^@/ s/$/\\1/' input_file 

Примечания удвоения обратного косых черт, чтобы подавить его специальное что означает sed.

Возможно, вы захотите пропустить суббинг-линии, которые уже были подбиты, возможно, с помощью предыдущего запуска. Это не трудно либо: просто соответствуют эти строки и использовать n команду для вывода их без дальнейшей обработки:

sed '/\\1$/ n; /^@/ s/$/\\1/' input_file 

Обратите внимание, что sed сценарий заключен в одинарные кавычки, а не двойные кавычки; это имеет значение (для оболочки) здесь.

+0

Работал отлично! Благодаря! – aeli

1

@aeli: Попробуйте (если вы заинтересованы в AWK растворе) тоже:

awk '/^@/{print $0"\\1";next} 1' Input_file 

Это просто, посмотрите на линию, которая становится все началось с @, если да, то печатать полную строку вместе с «\ 1 "и выполните следующие действия (означает пропустить все другие упомянутые действия). Упоминание 1 означает: в awk оно работает при условии, то метод действия, поэтому я помещаю здесь 1 здесь, который делает условие TRUE здесь и не упоминает никакого действия здесь, поэтому по умолчанию будет распечатана текущая строка.

+0

Awesome - отлично работает! – aeli

+0

Рад, что это сработало для вас, рад помочь. Продолжайте публикацию/обучение. – RavinderSingh13