Как передать параметр bash в скрипт awk? - PullRequest
4 голосов
/ 19 декабря 2011

У меня есть файл awk:

#!/bin/awk -f
BEGIN {

}
{
        filetime[$'$colnumber']++;
}
END {
        for (i in filetime) {
                print filetime[i],i;
        }
}

И скрипт bash:

#!/bin/bash
var1=$1
awk -f myawk.awk

Когда я бегу:

ls -la | ./countPar.sh 5

Я получаю сообщение об ошибке:

ls -la | ./countPar.sh 5
awk: myawk.awk:6:         filetime[$'$colnumber']++;
awk: myawk.awk:6:                   ^ invalid char ''' in expression

Почему? $ colnumber должен быть заменен на 5, поэтому awk должен прочитать 5-й столбец вывода ls. Спасибо.

Ответы [ 3 ]

5 голосов
/ 19 декабря 2011

Вы можете передавать переменные в свой скрипт awk непосредственно из командной строки.

Измените эту строку:

filetime[$'$colnumber']++;

На:

filetime[colnumber]++;

И выполните:

ls -al | awk -f ./myawk.awk -v colnumber=5

Если вы действительно хотите использовать оболочку bash:

#!/bin/bash
var1=$1
awk -f myawk.awk colnumber=$var1

(с теми же изменениями в вашем скрипте, что и выше.)

Если вы хотитеиспользуйте переменные окружения use:

#!/bin/bash
export var1=$1
awk -f myawk.awk

и:

filetime[ENVIRON["var1"]]++;

(хотя я действительно не понимаю, какова цель вашего сценария awk. Последняя часть может быть упрощена до:

END { print filetime[colnumber],colnumber; }

и синтаксический анализ вывода ls, как правило, плохая идея.)

2 голосов
/ 19 декабря 2011

Самый простой способ сделать это:

#!/bin/bash
var=$1
awk -v colnumber="${var}" -f /your/script

Но в вашем awk скрипте вам не нужно $ перед числовым индексом.

НТН

0 голосов
/ 06 октября 2016

Передача 3 переменных в скрипт myscript.sh var1 - номер столбца, для которого установлено условие. В то время как var2 и var3 являются входными и временными файлами.

#!/bin/ksh
var1=$1
var2=$2
var3=$3
awk -v col="${var1}" -f awkscript.awk ${var2} > $var3
mv ${var3} ${var2}

выполнить, как показано ниже -

./myscript.sh 2 file.txt temp.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...