Строка Grep после / до замены -A / -B в AIX

Установка Rust вручную, похоже, устранила проблему:

curl https://sh.rustup.rs -sSf | sh
1
17.02.2016, 14:54
2 ответа

Я бы сделал это немного по-другому. Сначала выполните команду db2 LIST DB DIRECTORY и сохраните ее вывод в текстовый файл. Таким образом, вам не придется выполнять ее несколько раз. Затем для каждого имени цели передайте имя awk-сценарию, который соберет соответствующие строки:

## Run the db command
tempfile=$(mktemp)
db2 LIST DB DIRECTORY > "$tmpfile"
## I am assuming you will have a loop for the different target names
for name in OLTPF OLTPA; do
  awk -v name="$name" '{
       if(/Database alias/){n=$4; a[n]=$0; i=1}
       if (i<=6 && i>1){ a[n]=a[n]"\n"$0}
       i++;
      }END{if(name in a){print a[name]}}' $tempfile
done
0
27.01.2020, 23:36

ed может предоставить простой способ выполнить эту задачу.

Если мы можем предположить, что существует только одно совпадение, то это альтернатива вашему конвейеру, использующая ed и устранение ненужных cat и вторичных grep:

ed -s file <<\EOED | awk '/Database name/ {print $4}'
    /Directory entry type.*Indirect/-4,//p
    q
EOED

Если их несколько, неперекрывающиеся совпадений, глобальная команда ed может использоваться для их отметки:

ed -s file <<\EOED | awk '/Database name/ {print $4}'
    g/Directory entry type.*Indirect/-4,.p
    q
EOED

Чтобы продемонстрировать случай перекрывающихся совпадений, предполагая, что мы сопоставляем строку foo , и есть совпадения в строках 7 и 9, и мы вытянув три предыдущие строки каждого совпадения в качестве контекста, результат будет выглядеть следующим образом:

line 4      <--- context
line 5      <--- context
line 6      <--- context
line 7 foo  <--- matched
line 6      <--- context      <--- repeated
line 7 foo  <--- context      <--- repeated
line 8      <--- context
line 9 foo  <--- matched
line 10
line 11
2
27.01.2020, 23:36

Теги

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