Как напечатать только часть каждого ряда, что звезды с определенным символом

Добавление других серверов имен в ] /etc/resolv.conf устраняет проблему. Раньше это выглядело так:

user@debian82:~$ nano /etc/resolv.conf
nameserver 10.0.0.138

Теперь это выглядит так:

user@debian82:~$ nano /etc/resolv.conf
nameserver 10.0.0.138
nameserver <ISP's dns name server>
nameserver 8.8.8.8 <(Google's)>

И соединение возобновлено:

PING google.com (194.90.196.110) 56(84) bytes of data.
64 bytes from 194.90.196.110: icmp_seq=1 ttl=59 time=14.5 ms
64 bytes from 194.90.196.110: icmp_seq=2 ttl=59 time=15.9 ms
64 bytes from 194.90.196.110: icmp_seq=3 ttl=59 time=15.3 ms
64 bytes from 194.90.196.110: icmp_seq=4 ttl=59 time=14.0 ms
64 bytes from 194.90.196.110: icmp_seq=5 ttl=59 time=15.3 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 5882ms
rtt min/avg/max/mdev = 14.030/15.048/15.930/0.669 ms
-1
13.08.2018, 20:37
3 ответа

Использованиеawk

awk -F'/' '$NF ~ /^HI\./{ print $NF }' infile

, чтобы удалить суффикс .md5, вы можете сделать:

awk -F'(/|.md5)' '$(NF-1) ~ /^HI\./{ print $(NF-1) }' infile
  • в awk, $0относится ко всей строке/записи, а $1, $2, $3,... относятся к первой, второй, третьей,... соответственно ; и $NFотносится к последнему полю, и, соответственно, $(NF-1)является предпоследним полем.

  • оператор тильда ~в awk обрабатывает оператор правой -руки как (расширенное )регулярное -сопоставление выражения с левым -операндом руки как строкуstring ~ /regular-expression/

Решение sed:

sed 's:.*/\([^/]*\)\.md5$:\1: ; /^HI\./!d' infile
  • этот /\([^/]*\)\.md5соответствует последней косой черте, за которой следует что угодно, но не косая черта, оканчивающаяся на .md5. Мы берем\([^/]*\)(все, что находится между последней косой чертой и .md5, как групповое совпадение, и печатаем только это в замещающей части с обратной -ссылкой \1.

  • это /^HI\./!dудаляет строки, которые не начинаются с HI.из результата предыдущей команды sed.

  • мы использовали другой разделитель sed:, так как у нас есть специальный символ /на входе.

3
28.01.2020, 05:07

Попробуйте это,

awk -F '/' '$NF ~ /^HI/ {print substr($NF, 1, length($NF)-4)}' file.txt
  • печатает последнее поле, если последнее поле начинается сHI
  • исключает последние 4 символа.md5

Выход

HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R1.fastq.gz
HI.2613.007.Custom_0022.ED9_SD2A27-1_180_R2.fastq.gz
HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R1.fastq.gz
HI.2613.007.Custom_0021.ED4_KS1A29-7_338_R2.fastq.gz
HI.2613.007.Index_18.ED17_MO1A26-7_353_R1.fastq.gz
HI.2613.007.Index_18.ED17_MO1A26-7_353_R2.fastq.gz
HI.2613.007.Index_14.ED14_IA2A35-2_310_R1.fastq.gz
1
28.01.2020, 05:07
awk -F"filename/" '{gsub (".md5","");print $2}'
0
28.01.2020, 05:07

Теги

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