Использование AWK нашел конструкцию в для цикла - PullRequest
0 голосов
/ 23 сентября 2019

Я нашел этот полезный ответ на SO на проблему, с которой я столкнулся (https://stackoverflow.com/a/30387380)

Однако я не могу понять, как использовать конструкцию внутри цикла for.

Ниже моя последняя попытка

awk '
BEGIN{split(ENVIRON["LABELS"], label)}
{
        for (i = 1; i <= NF; i++)
                !found && /label[i]/ { print "# "label[i];found=1} 1
}'  >> "${TMPFIL}"

Но это не с:

awk: syntax error at source line 5
 context is
                                !found && /label[i]/ >>>  { <<< 
awk: illegal statement at source line 5

РЕДАКТИРОВАТЬ ДОБАВИТЬ ДЕТАЛИ ...

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

У меня есть список чтений (в текстовом файле):

Foo{foober="x"} 5
Foo{foober="x"} 5
Bar{barfoo="y"} 0
Bar{barfoo"y"} 0

Итак, что-то вроде:

LABELS=' 
Foo
Bar' \
awk '
BEGIN{split(ENVIRON["LABELS"], label)}
{
        for (i = 1; i <= NF; i++)
                !found && /label[i]/ { print "# "label[i];found=1} 1
}'  >> "${TMPFIL}"

Ожидаемый результат выглядит следующим образом:

# Foo
Foo{foober="x"} 5
Foo{foober="x"} 5
# Bar
Bar{barfoo="y"} 0
Bar{barfoo"y"} 0

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

РЕДАКТИРОВАТЬ 2: В соответствии с просьбой OP добавить следующий код сейчас.

awk -F"{" 'old!=$1{print "# "$1} {old=$1;print}'  Input_file


Не могли бы вы попробовать следующее.Учитывая, что вы хотите выводить согласно счетчику $1, где разделитель - это пробел (по умолчанию в awk это пробел)

awk '!a[$1]++{print "# header_group_"++count} 1' Input_file


В случае, если вы хотите искатьстрока перед {, затем попробуйте следующее.

awk 'BEGIN{FS="{"} !a[$1]++{print "# header_group_"++count} 1' Input_file
0 голосов
/ 23 сентября 2019

Вы можете попробовать этот скрипт awk:

awk -F'{' '$1!=old{print "# header_group_" ++c}{old=$1}1' file

Это зависит от разделителя полей {, так что первое поле является ключом для группировки строк вместе.

Когда первыйполе отличается от предыдущего, строка заголовка печатается.

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