не используйте переменную.
awk допускает множественный ввод файла программы.
генерировать временный файл awk для каждого случая, например:
для file1.csv
создать temporary.awk
программу (file1.awk)
function check() { if ( $1 == ""180817CR0003988" ) return "blue" ; else "back" }
дляfileX.csv
function check() { if ( $9 == ""unix.stackexchange.com" ) return "grey" ; else "blue" }
затем при вызове
color=check() ;
awk вызывается как
awk -f temporary.awk -f long.awk...
Ваше заявление awk большое, я предлагаю поместить его в файл с именем long.awk
.
awk 'NR > 1 && (max == "" || $NF > max) { max = $NF } END { print max }' file
Это считывает ваш файл, и всякий раз, когда последнее поле любой строки, кроме первой строки (, которая является строкой заголовка ), является числовым значением, большим, чем любое из виденных ранее, это значение запоминается в переменная max
. Значение также запоминается, если ранее значение не запоминалось.
В конце выводится значение переменной max
, которое является максимальным значением, наблюдаемым в последнем поле любой строки (, кроме первой ).
Предполагается, что столбец class
всегда находится в конце каждой строки.
Специальные переменные NF
и NR
представляют собой количество полей в текущей записи и количество прочитанных записей соответственно. Значение $NF
— это значение последнего поля в текущей записи.
Чтобы получить всю строку с наибольшим числом в последнем столбце, необходимо внести всего пару небольших изменений в приведенный выше код, чтобы также запомнить и распечатать соответствующие данные:
awk 'NR > 1 && (max == "" || $NF > max) { max = $NF; line = $0 } END { print line }' file
sort
выполняет эту функцию, определяя положение ключа. Вы можете попробовать это:
sort --key=3 file