#awk
#awk
Вопрос:
Я хотел бы передать предопределенную переменную в качестве номера столбца для скрипта awk. Я удалил ненужные биты, и ниже приведен пример того, что я хотел бы сделать. Далее ниже приведена часть того, что я пробовал до сих пор.
Причина: это полудлинный скрипт, который в настоящее время работает, хотя я хотел бы определить столбцы в начале сценария, поскольку это значительно упростило бы обновление сценария по мере изменения столбцов.
Я бы хотел, чтобы переменная «state» передавалась в идентификатор столбца awk, например:
#/bin/bash
export state='$6'
cat ~/file | awk -v column="$state" 'state!="FAILED"'
Выполнение приведенного выше кода создает строки, в которых действительно есть столбец 6 как «СБОЙ», поэтому должно быть что-то не так. Пока awk '$6!="FAILED"'
работает, как ожидалось
Разные вещи, которые я пробовал до сих пор:
- определение $state как 6, а не как ‘$ 6’ и включение $ в команду awk ! = .
awk '{ENVIRON["state"]!="FAILED"}'
с теми же изменениями, что и 1
Комментарии:
1. Переименовать
column
вawkvar
иstate
вshellvar
. Теперь вы понимаете, в чем ваша проблема?
Ответ №1:
Это должно сработать:
state=6
cat ~/file | awk -v column="$state" '$column != "FAILED"'
$var
в awk будет получено поле, указанное значением переменной var
.
Итак, $NF
получим последнее поле. Обратите внимание, что переменная awk здесь column
, а не state
.
Например:
% seq 1 20 | paste - - - -
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
% seq 1 20 | paste - - - - | awk -v column=3 '{print $column}'
3
7
11
15
19
Комментарии:
1. вам это не нужно
cat
, awk может читать файлы самостоятельно. кроме этого lgtm