The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
вернуть значение из awk, !*! d2e8k7, 11-Окт-19, 09:48  [смотреть все]
Добрый день!
можно ли вернуть значение из awk в запускающий его shell-скрипт ?

z1=$(awk '{print $5}' file) не подходит, потому что

awk-скрипт парсит файл, выводит строки по некоторым условиям и считает количество выведенных строк.
Значение количества строк хотелось бы вернуть в sh, чтобы использовать в другом awk.

Благодарю откликнувшихся.

  • вернуть значение из 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().
        Но все равно должен быть какой-то менее замороченный путь.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру