Проблема с помощью awk

Отвечать на вопрос 1: если Вы работаете crontab -e как Ваш собственный пользователь задания будут запланированы в crontab того пользователя и будут таким образом работать с полномочиями того пользователя.

Но необходимо полагать, что задания будут работать в неинтерактивной оболочке, означающей, что $PATH мог бы отличаться от того, который Вы имеете при запущении скрипта из командной строки.

Лучше всегда использовать полные пути в сценариях, особенно если Вы планируете запланировать их через в/крон и т.д.

Я также рекомендовал бы использовать полные пути для всех файлов для предотвращения точно проблем, которые Вы видите.

Для предотвращения условий состязания и других проблем безопасности, необходимо также использовать mktemp для проверки файл, который Вы читаете, не изменяется ничем вне Вашего сценария.

Таким образом, я изменил бы сценарий на что-то как:

vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
mail_msg=`/bin/mktemp`
/bin/sed "s/IPADDR/$vIP_ADDR/g" /home/xxxx/Documents/Scripts/template.txt > $mailmsg
/path/to/ssmtp XXXXX@gmail.com < $mailmsg
/bin/rm $mailmsg
1
31.03.2013, 13:26
2 ответа

Попробуйте что-то вроде этого:

#!/usr/bin/gawk -f
{
    ## Every time we change file, print the data for
    ## the last file read (ARGV[ARGIND-1])
    if(FNR==1 && ARGIND>1){
        print "This was the analysis of file:" ARGV[ARGIND-1]
        print "The number of lines with >10 characters is:" s,"\n"
        s=0;
    } 
    if(length($0)>10){
        print "The line number is:" FNR
        print "The content of the line is:" substr($0,10)
        s=s+1   
    }
}
## print the data collected on the last file in the list
END{
    print "This was the analysis of file:" ARGV[ARGIND]
    print "The number of lines with >10 characters is:" s,"\n"
}

Если Вы выполняете это на файлах a, b и c:

$ ./foo.awk a b c
The line number is:2
The content of the line is:kldjahlskdjbasd
This was the analysis of the file:a
The number of lines with characters >10 is:1 

The line number is:2
The content of the line is:ldjbfskldfbskldjfbsdf
The line number is:3
The content of the line is:kfjbskldjfbskldjfbsdf
The line number is:4
The content of the line is:ldfbskldfbskldfbskldbfs
The line number is:5
The content of the line is:lsjdbfklsdjbfklsjdbfskljdbf
This was the analysis of the file:b
The number of lines with characters >10 is:4 

The line number is:1
The content of the line is: asdklfhakldhflaksdhfa
This was the analysis of the file:c
The number of lines with characters >10 is:1 
1
27.01.2020, 23:54

можно вставить сводку конца файла END {...} блок - это будет выполняться, поскольку сценарий выходит.

т.е. избавьтесь от поддельного x=wc -l и изменение if (FNR > x) { ... } только к END { ... }

0
27.01.2020, 23:54
  • 1
    , это не работает, Если я даю 2 файла как параметры –  Cucerzan Rares 31.03.2013, 14:16
  • 2
    сообщения да, поэтому блок КОНЦА, работает в конце ВСЕГО входа (или на выходе), не в конце каждого файла. ответ terdon будет работать на несколько файлов. или Вы могли использовать для обертки цикла или создать список имен файлов (с, например, найдите), и канал в xargs -n 1 или любой из нескольких других методов запущения awk скрипта однажды на файл. –  cas 02.04.2013, 11:40

Теги

Похожие вопросы