Укажите другие флаги в заголовке скрипта awk. - PullRequest
1 голос
/ 02 апреля 2020

Я хочу написать файл сценария awk с использованием заголовка #!/bin/awk -f, но я хочу, чтобы этот сценарий всегда использовал : в качестве разделителя полей. Но по какой-то причине написание #!/bin.awk -F: -f дает мне синтаксическую ошибку. Я также хочу, чтобы этот скрипт всегда выполнялся для одного и того же файла, поэтому я бы хотел также жестко его кодировать. По сути, я хочу работать так:

#!/bin/awk -F: -f -- /etc/passwd

, за которым следует некоторый код awk

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Никогда не используйте shebang для вызова awk, так как это не имеет никакой пользы по сравнению с простым вызовом awk внутри скрипта оболочки, но лишает вас возможности разделять аргументы, передаваемые скрипту оболочки, в значения для обработки оболочкой, значения awk для * * * * * * * * * * * * * * * * * 100 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * *} в таком случае: если бы вы могли тривиально настроить его на:

#!/bin/env bash
sort "$1" |
awk -F':' -v foo="$2" '
whatever
' - FS="$3" "$4"

или что-то еще, что вам нужно сделать, чтобы аргументы, переданные в ваш скрипт оболочки, были наиболее подходящими.

0 голосов
/ 02 апреля 2020

Что-то вроде этого должно сделать:

#!/bin/awk -f              # using the #!/bin/awk -f
BEGIN {
    FS=":"                 # always use : as a field separator
    ARGC=2
    ARGV[1]="/etc/passwd"  # always run on the same file
}
$3==0 {                    # followed by some awk code
    print $1
}

Запустить его:

$ chmod u+x program.awk
$ ./program.awk
root
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...