Как сохранить только строку, начинающуюся с символа, и строку после

Ваш режим umaskневерен.

# umask 644
# touch test1
# stat -c "%a %n" test1
22 test1

Чтобы получить результирующие файлы с 644, вам нужно установить umask 0022.

# umask 0022
# touch test2
# stat -c "%a %n" test2
644 test2

Изman umask:

umask() sets the calling process's file mode creation mask (umask) to mask & 0777 (i.e., only the file permission bits of mask are used), and returns the previous value of the mask.

3
25.03.2021, 02:04
5 ответов

Скажите grepтакже ищите строки, начинающиеся с >, и включайте строку, следующую за ней:

grep -A1 --no-group-separator '^>' combined_v4.fa > combined_v5.fa

Если ваша версия grepне поддерживает --no-group-separator, попробуйте это:

grep -A1 '^>' combined_v4.fa | grep -v '^--$' > combined_v5.fa
9
28.04.2021, 22:57

Вот один из способов с sed:

sed -n '/^>/!d;N;p' file

Обратите внимание, что если последняя строка ввода начинается с «>», она не будет напечатана.

С awk:

awk 'prev {print prev ORS $0; prev=""} /^>/ {prev=$0}' file

Дождитесь строки после «>», чтобы напечатать две строки. Вместо регулярного выражения можно использовать index():

awk 'prev {print prev ORS $0; prev=""} index($0,">")==1 {prev=$0}' file

^>— это регулярное выражение для сопоставления строки, начинающейся с «>». index($0,">")возвращает начальную позицию строки «>», которая должна быть равна единице (...==1), если с нее начинается запись.

Чтобы убедиться, что у него тоже есть «hCoV»:

sed -n '/^>/!d;/hCoV/!d;N;p' file
awk 'prev {print prev ORS $0; prev=""} /^>/ && /hCoV/ {prev=$0}' file
3
28.04.2021, 22:57

Я предлагаю это, используя GNUsed:

# find the multiline pattern ^digits→ACGT
# and delete those lines
$ sed '/^[[:digit:]]\+$/,/^[ACGT]\+$/d' file 
>hCoV-19/2832832
ACTCGGGGGG
>hCoV-19/2789877
ACTCGGCCC
2
28.04.2021, 22:57

С помощью awk вы можете:

awk '/^>/ {c=2} c-- > 0' file

для печати 2 строк, когда отображается >.

3
28.04.2021, 22:57

С помощью awkвы можете попробовать:

awk 'f {print; f=0} /^>/ {print;f=1}' file
>hCoV-19/2832832
ACTCGGGGGG
>hCoV-19/2789877
ACTCGGCCC

  • Этот отличный пост может вам помочь:

"Printing with sed or awk a line following a matching pattern": https://stackoverflow.com/questions/17908555/printing-with-sed-or-awk-a-line-following-a-matching-pattern

1
28.04.2021, 22:57

Теги

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