- вернуть значение из awk, Andrey Mitrofanov_N0, 09:54 , 11-Окт-19 (1) +1
> z1=$(awk '{print $5}' file) не подходит, потому что > Значение количества строк хотелось бы вернуть в sh, чтобыz1=$(awk 'END{print NR}' file)
- вернуть значение из awk, d2e8k7, 11:26 , 11-Окт-19 (2)
Скрипт он на самом деле несколько сложнее. Примерно такой: #/bin/sh ... awk '{ if(condition) { arr=arr "\n\t " $1 " " $2 " " $3 " " $4 "; <-- тут еще др данные выбираются count++; } } END{ print count; print arr; }' file > output.txt .. awk '{}' <-- След. awk парсит другой файл. Сюда бы я хотел передать count
- вернуть значение из awk, Andrey Mitrofanov_N0, 13:39 , 11-Окт-19 (3)
>[оверквотинг удален] > count++; > } > } > END{ > print count; > print arr; > }' file > output.txt > .. > awk '{}' <-- След. awk парсит другой файл. Сюда бы я > хотел передать count awk 'ARGIND==1{count=$0;nextfile} {....}' output.txt ...
- вернуть значение из awk, d2e8k7, 14:03 , 11-Окт-19 (4)
>[оверквотинг удален] >> } >> } >> END{ >> print count; >> print arr; >> }' file > output.txt >> .. >> awk '{}' <-- След. awk парсит другой файл. Сюда бы я >> хотел передать count > awk 'ARGIND==1{count=$0;nextfile} {....}' output.txt ...Если я правильно понял, Вы советуете обрабатывать файлы одним и тем же awk-скриптом Но у меня входные файлы имеют разную структуру, поэтому и awk-скрипты для них разные. Есть ли у awk возможность возвращать значение? ENVIRON, как я понял, не может изменить значение переменной окружения, упомянутый в первом сообщении способ не подходит... Получается никак не вернуть? :(
- вернуть значение из awk, Аноним, 17:59 , 11-Окт-19 (5)
> z1=$(awk '{print $5}' file) не подходит, потому что > awk-скрипт парсит файл, выводит строки по некоторым условиям и считает количество выведенных > строк. > Значение количества строк хотелось бы вернуть в sh, чтобы использовать в другом > awk.Вы заблуждаетесь. Отлично все подходит. Вы можете z1 подставить в текст программы awk z1=$( awk 'program1' file ) awk "BEGIN { count=$z1 } /.../{ ... тут что-то с использованием $count... }" file2 либо сразу в тело awk "/.../{ .... ${z1} ..... }" file2 Советую посмотреть какие-нибудь книжки про шелл скриптинг, sed и awk, чтобы увидеть примеры и понять, как с этим работают. Уверен, что после пары часов чтения вы перепишете свои упражнения гораздо логичнее и короче.
- вернуть значение из awk, d2e8k7, 17:42 , 16-Окт-19 (6)
>[оверквотинг удален] > awk > z1=$( awk 'program1' file ) > awk "BEGIN { count=$z1 } /.../{ ... тут что-то с использованием $count... > }" file2 > либо сразу в тело > awk "/.../{ .... ${z1} ..... }" file2 > Советую посмотреть какие-нибудь книжки про шелл скриптинг, sed и awk, чтобы увидеть > примеры и понять, как с этим работают. > Уверен, что после пары часов чтения вы перепишете свои упражнения гораздо логичнее > и короче.Как-то не подошло такое решение для моего случая z=$(awk '{print 1; print 3; print 4 " " 5;print "End of out"} END{print 2 }' data.txt > out.txt) echo $z пустой вывод вот так я сделал: awk '{print 1; print 3; print 4 " " 5;print "End of out"} END{print 2 > "cnt.txt"; print "from END"}' data.txt > out.txt Спасибо, что уделили внимание count=`cat cnt.txt` awk -v myCnt=$count 'BEGIN{print "cnt is " myCnt}' Т.е. - в первом скрипте выводятся какие-то данные в файл out.txt. - В блоке END выводим значение count в файл. - Откуда его потом считываем и передаем в след. awk-скрипт Спасибо, что уделили внимание
- вернуть значение из awk, Аноним, 22:13 , 16-Окт-19 (7)
>[оверквотинг удален] > of out"} END{print 2 > "cnt.txt"; print "from END"}' data.txt > > out.txt > Спасибо, что уделили внимание > count=`cat cnt.txt` > awk -v myCnt=$count 'BEGIN{print "cnt is " myCnt}' > Т.е. > - в первом скрипте выводятся какие-то данные в файл out.txt. > - В блоке END выводим значение count в файл. > - Откуда его потом считываем и передаем в след. awk-скрипт > Спасибо, что уделили вниманиеЕсли оба вызова авк так тесно связаны, логично запустить второй авк из первого. В том же блоке END через system(). Но все равно должен быть какой-то менее замороченный путь.
|