Пользовательское форматирование данных и сопоставление с образцом

find. -print | perl -pe 'a=$_; chomp $a; -d $a or s:.*/::'
-1
06.12.2020, 21:13
1 ответ

Вы пытаетесь сопоставить конец строки $в начальном шаблоне, но в этой позиции во входных данных ничего нет. Также нарушается форматирование блока ENDверхнего/нижнего колонтитула.

Слегка измененный код:

pattern='PPPA'
awk -v ptn="$pattern" '
  $0 ~ "^WWWW " ptn " "{ save=1; header=$0; next }
  save && $0 ~ "^HHHH " ptn " "{ save=0; footer=$0; sum+=$3; next }
  save{ line[i++]=$0; next }
  1  # print current record
  
  END{
    if (i){
      print header
      for (j=0;j<i;j++) print line[j]
      $0=footer  # assign footer to current record
      $3=sum     # replace 3rd field with sum
      print      # print footer
    }
  }
' file

Выход:

WWWW PPPB TTTT
XB XC
XY XE
HHHH PPPB 200 XXX1
WWWW PPPC TTTT
XX XY
XA XB
XB XC
HHHH PPPC 300 XXX9
WWWW PPPD TTTT
XX XY
XA XB
XB XC
XY XE
XN XA
HHHH PPPD 500 XXX4
WWWW PPPA TTTT
XA XB
XB XC
XY XE
XA XB
XB XC
XN XX
HHHH PPPA 700 XXX6

Модифицированный код для фактических данных со следующими изменениями:

  • соответствует WWWи HHHкак первое поле, шаблон как второй (заголовок )или третий (нижний колонтитул )поле
  • сохранить старое значение нижнего колонтитула в oldvalue, используемое для замены этого значения на sumв блоке END
  • использовать второе поле для значения нижнего колонтитула (sum,oldvalue)
pattern='PPPA'
awk -v ptn="$pattern" '
  $1=="WWW" && $2==ptn{ save=1; header=$0; next }
  save && $1=="HHH" && $3==ptn{ save=0; oldvalue=$2; sum+=$2; footer=$0; next }
  save{ line[i++]=$0; next }
  1
  
  END{
    if (i){
      print header
      for (j=0;j<i;j++) print line[j]
      sub(oldvalue, sum, footer) # replace oldvalue with sum
      print footer
    }
  }
' file

Выход:

WWW                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PPPB                                                  TTTT                                                                                                                                                                                                                                                                                                                                                                                                                                                                            XXXAAXX                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
XB XC
XY XE
HHH                                                                 3500                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PPPB                                                   TTTT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
WWW                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PPPC                                                  TTTT                                                                                                                                                                                                                                                                                                                                                                                                                                                                         XXXAABB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
XX XY
XA XB
XB XC
XY XE
XN XA
HHH                                                                 4000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PPPC                                                   TTTT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
WWW                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             PPPA                                                  TTTT                                                                                                                                                                                                                                                                                                                                                                                                                                                                            XXXAAXX                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
XX XY
XA XB
XB XC
XY XE
XA XB
XB XC
XN XX
HHH                                                                 1500                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PPPA                                                   TTTT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
0
18.03.2021, 22:45

Теги

Похожие вопросы