Как я могу передать предопределенную переменную в функцию столбца awk?

#awk

#awk

Вопрос:

Я хотел бы передать предопределенную переменную в качестве номера столбца для скрипта awk. Я удалил ненужные биты, и ниже приведен пример того, что я хотел бы сделать. Далее ниже приведена часть того, что я пробовал до сих пор.

Причина: это полудлинный скрипт, который в настоящее время работает, хотя я хотел бы определить столбцы в начале сценария, поскольку это значительно упростило бы обновление сценария по мере изменения столбцов.

Я бы хотел, чтобы переменная «state» передавалась в идентификатор столбца awk, например:

 #/bin/bash

export state='$6'


cat ~/file | awk -v column="$state" 'state!="FAILED"'
  

Выполнение приведенного выше кода создает строки, в которых действительно есть столбец 6 как «СБОЙ», поэтому должно быть что-то не так. Пока awk '$6!="FAILED"' работает, как ожидалось

Разные вещи, которые я пробовал до сих пор:

  1. определение $state как 6, а не как ‘$ 6’ и включение $ в команду awk ! = .
  2. 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