Скрипт awk для чтения данных из текстового файла - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь создать сценарий awk для чтения данных из txt-файла и создания выходного сценария.Можно ли создать вывод с помощью awk?

while IFS=',' read -r a b c; do echo "source "$a" and target "$b" and line "$c"" ; done < test.txt

test.txt

"x","y","8"
"x","6"
"y","7"

Вывод:

source "x" and target "y" and line "8"
source "x" and target "6" and line 
source "y" and target "7" and line

Ожидаемый результат:

"source x and target y and line 8"
"source x and line 6"
"target y and line 7"

Ответы [ 2 ]

0 голосов
/ 20 октября 2018
$ awk -F'[",]+' '{print "\"source " $2 (NF>4 ? " and target " $3 : "") " and line " $(NF-1) "\""}' file
"source x and target y and line 8"
"source x and line 6"
"source y and line 7"
0 голосов
/ 20 октября 2018

Мне было трудно четко различить требования по предоставленным входным и выходным данным.Однако, если мы немного скорректируем ваш ввод (немного отличающийся от предложения Corentin, мы можем предоставить работающий скрипт awk, который предоставит желаемый результат.

Давайте начнем с предположения:

Вводв следующем формате:

<source>,<target>,<line>

Теперь мы можем написать этот сценарий awk:

awk -F, '
BEGIN { 
  split( "source target line" , value , " " ) 
}

{
  output=""
  for ( field = 1 ; field <=  length(value) ; field++  ) 
  {
    if ( $field ) {
      output = output  ( output ? " and " : "" ) value[ field ]   " " $field
    }
  }
  print "echo " output
}' << EOF
"x","y","8"
"x",,"6"
,"y","7"
EOF

Если честно, вышеприведенный код немного не попадает в цель.иметь дело с двойными кавычками на входе или выходе. Я думаю, что читаемость решения будет снижена, если мы будем говорить о кавычках. Технически, если кавычки на входе должны были защищать запятые (как в случае с CSV) Iрассмотрел бы написание этой программы на python (или другом языке), который поддерживает csv.

Вот вывод этой программы:

echo source "x" and target "y" and line "8"
echo source "x" and line "6"
echo target "y" and line "7"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...