ошибка в цикле while с sed

Чтобы предотвратить resolv.conf для обновления во время загрузки необходимо внести следующие изменения:

Изменить PEERDNS = yes на PEERDNS = no

PEERDNS = no

Это запретит сетевой службе обновлять /etc/resolv.conf с DNS-серверами, полученными от DHCP-сервера.

упоминается в @Ipor Sircer комментарий

2
14.11.2016, 19:43
2 ответа

Думаю, вы ищете что-то вроде этого:

cat inputFile.txt | while read line
    do
        eval `echo "$line" | sed 's|^\([^/]*\)/\([^ ]*\) \(.*\)|name="\1" ports=\2 tag="\3"|'`
        echo "$name $tag"
        realname=`echo "$name" | sed 's|-[0-9].*||'`
        for port in $(echo $ports | sed 's|/| |g')
        do
            echo "$realname-$port $tag"
            #or echo "$realname$port $tag", but I suspect a typo in your initial post
        done
    done
0
27.01.2020, 22:10

Как добиться этого с помощью awk

Для лучшей читаемости / простоты использования создайте awk скрипт ( myScript.awk ) со следующим содержанием:

{ 
  n=split($1, a, "/")
  split(a[1], b, "-")

  for (i=1; i<n+1; i++) {
    if (i == 1) {
      printf a[i]"\t"$2"\n"
    }
    else {
      printf b[1]"-"b[2]"-"a[i]"\t"$2"\n"
    }    
  }
}

Как это работает:

n=split($1, a, "/")

Эта строка занимает первое поле (например, «mmu-miR-15-5p / 16-5p / 195-5p / 424-5p / 497-5p» для первой строки), разделяет его разделителем «/», сохраняет в массиве a и хранит количество элементов, разделенных в n . Для первой строки:

a[1] = "mmu-miR-15-5p"
a[2] = "16-5p"
a[3] = "195-5p"
a[4] = "424-5p"
a[5] = "497-5p"
n = 5

Помните, что инструкции awk выполняются для каждой строки, поэтому результат для следующей строки будет другим!

split(a[1], b, "-")

Точно так же эта строка берет первый элемент a и разделяет его разделителем «-». Это дает:

b[1] = "mmu"
b[2] = "miR"
b[3] = "15"
b[4] = "5p"

Когда у нас есть эти массивы, все, что нам нужно сделать, это перебрать количество строк вывода (количество элементов, разделенных «/» во входной строке) и построить каждую строку с битами массивов a и b ! Мы должны сделать исключение для первой строки, потому что a [1] уже содержит «mmu-miR-», следовательно, if для различения этого случая!

Как запустить

awk -f myScript.awk input.txt

Протестировал, выводит то, что вы просите в своем вопросе.

ПРИМЕЧАНИЕ Как указано в моем комментарии к вашему вопросу, использование одного вызова awk намного эффективнее и «дружественнее к оболочке», чем цикл для каждой строки вашего файла. .

РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ Я изменил сценарий после вашего комментария. Теперь все должно быть в порядке!

2
27.01.2020, 22:10

Теги

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