Как можно успешно отправить пинг на все 127.0.0.0/8? [дубликат]

Эта awk программа выполнит то, что вы хотели сначала, с помощью одной команды:

awk '/ ^ date_1_ /, / ^ date_2_ / {if (prev) print prev; prev = $ 0} 'file.txt> file2.txt

Вы проверили это, и это сработало. Затем вы расширили вопрос, чтобы иметь возможность работать с рядом общих маркеров строк, заданных в виде пар аргументов.

Вы можете создать удобный рабочий процесс для этого, определив две вспомогательные функции:

  • Одна создает программу awk для подачи через подстановку процесса
  • Другая запускает awk с параметрами, переданными первому помощнику:

] Код:

fun1(){ while [ ! -z $1 ] && [ ! -z $2 ] ; do echo "
/^$1/,/^$2/ {if (\$0~/^$1/) prev=\"\";
if (prev) print prev; prev=\$0 }"; shift; shift ; done }

fun2(){ awk -f <(fun1 $@); }

# Example data, example ranges, but could be any string:
seq 1 13 | sed -e 's/.*/_&_/' | fun2 _2 _4 _9 _11
_2_
_3_
_9_
_10_

Решение проблемы версии 3:

fun3(){ echo "/^$1/,/^$2/ {if (\$0~/^$1/) prev=\"\";
if (prev) print prev; prev=\$0 }"; }

fun4(){ ifile=$1; shift; while [ ! -z $1 ] && [ ! -z $2 ] ; do
        awk -f <(fun3 $1 $2) $ifile > $1.txt ; shift; done }

# Create example data file:
seq 1 13 | sed -e 's/.*/_&_/' > inputData.txt

fun4 inputData.txt _2 _5 _8 _12

ls _*
_2.txt  _5.txt  _8.txt
10
31.07.2014, 21:43
0 ответов

Теги

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