Изменение вывода с помощью AWK - PullRequest
2 голосов
/ 16 июня 2020

Имея набор данных, как показано ниже, с разделителями (:) двоеточием:

##L1
Advc:start:TA_Wk;TA_Wk:rstb:ver:trstb.techind_C3_D[0].RESETH:LK

##L2
ner:ted:Unused:C1500:ver:sync3rmsfd0nt_t;tape_out:SOCK0

Я использую номер столбца и прикрепляю к нему несколько строк с помощью AWK. И я пытаюсь игнорировать сообщения, которые встречаются с #, и наконец их добавить.

#!/bin/bash
awk -F: '/^#/ {c=$0; sub(/#+/,"", c); next}
{print $1, "-f" " "$4, "-t" " "$6, "-d" " ""{"$3"}", "-t" " ""{"$7"}","-", "\"" c "\""}' s1

Вывод:

Advc -f rstb -t trstb.techind_C3_D[0].RESETH -d {TA_Wk;TA_Wk} -t {LK} - "L1"
 -f  -t  -c {} -c {} - "L1"
ner -f C1500 -t sync3rmsfd0nt_t;tape_out -d {Unused} -t {SOCK0} - "L2"

Желаемый результат:

Advc -f rstb -t trstb.techind_C3_D[0].RESETH -d {TA_Wk;TA_Wk} -t {LK} - "L1"
ner -f C1500 -t sync3rmsfd0nt_t;tape_out -d {Unused} -t {SOCK0} - "L2"

1. В столбцах 3 и 7, если такие слова, как «Не используется», «Не указано», он не должен печатать этот конкретный столбец, который он должен игнорировать вместе со строкой, прикрепленной к нему, как показано выше в желаемом выводе.

2. Как удалить пустые строки.

Как исправить два вышеуказанных условия в моем коде, как показано выше?

1 Ответ

2 голосов
/ 16 июня 2020

Исправление попытки OP: Исправлена ​​сама попытка OP здесь. Вам нужно пропустить пустые строки, чтобы правильно распечатать результат, что вы могли бы сделать с помощью простого условия if + Я внес незначительные изменения в вашу попытку, например, изменил sub на gsub при удалении части #, установив : в BEGIN раздел + дает переменным четко определенное имя, поэтому вместо c я изменил его на val для лучшего понимания.

awk 'BEGIN{FS=":"} /^$/{next} /^#/ {val=$0; gsub(/#/,"", val); next}
{print $1, "-f" " "$4, "-t" " "$6, \
($3!="Unused"?"-d" " ""{"$3"}":""),\
 ($7!="Unspecified"?"-t" " ""{"$7"}":""),"-", "\"" val "\""
}' s1="\""  Input_file


Моя попытка решить эту проблему: Написано и протестировано с показанными образцами в GNU awk.

awk '
BEGIN{
 FS=":"
}
/^$/{
  next
}
/^#/{
  val=$0
  gsub(/#/,"", val)
  next
}
{
  ($3=$3!="Unused"?"-d" " ""{"$3"}":"")
  ($7=$7!="Unspecified"?"-t" " ""{"$7"}":"")
  print $1, "-f" " "$4, "-t" " "$6, \
  $3,\
  $7,"-", "\"" val "\""
}' s1="\""  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...