Переупорядочить поля разделения труб с соединением между 2 полями

У меня было такое же сообщение об ошибке из нескольких приложений (!), Когда я обновлял pango в эти дни (на OpenSuSE_Tumbleweed).

В списке рассылки OpenSuSE есть ветка о той же проблеме с AcrobatReader. Там я понял, что это связано с зависимостями от Pango до Harfbuzz (" hb_buffer ..."). Поэтому я обновил libharfbuzz с 0.9.9. до 1.0.3. и все снова заработало нормально.

1
04.06.2018, 13:11
4 ответа

Usando GNU awk, buscando campos con solo números:

awk -v FPAT='[0-9]+' -v OFS=',' '{$2=$2 "/" $3; printf "%s,%s,",$1,$2; for(i=4;i<=NF;i++){ printf "%s%s",$i,i==NF?ORS:OFS}}'  <<< "|Ordernum=8921|mn=03|yr=20|id=869|Name=1|Street=2|City=3|State=4|Zip=5|Country=6|"

FPATdescribe cómo se ve el patrón. En este caso, se compone de número solamente.

OFSes el separador de campo de salida que permite formatear con ,.

El segundo campo se reconstruye con el tercero. Todos los demás se imprimen tal cual.

0
27.01.2020, 23:43

Usando GNUawk:

awk -F\| '{print gensub(/Ordernum=(.*)/,"\\1","g",$2)","gensub(/mn=(.*)/,"\\1","g",$3)"/"gensub(/yr=(.*)/,"\\1","g",$4)","gensub(/id=(.*)/,"\\1","g",$5)","gensub(/Name=(.*)/,"\\1","g",$6)","gensub(/Street=(.*)/,"\\1","g",$7)","gensub(/City=(.*)/,"\\1","g",$8)","gensub(/State=(.*)/,"\\1","g",$9)","gensub(/Zip=(.*)/,"\\1","g",$10)","gensub(/Country=(.*)/,"\\1","g",$11)}'
0
27.01.2020, 23:43

Awk solución:

awk '{
         for (i = 1; i <= NF; i++)    # iterating through all fields
             if ($i != "") {          # check if field value is not empty
                 c++; sub(/[^=]+=/, "", $i);
                 printf "%s%s", (c > 1? (c == 3? "/" : ",") : ""), $i
             }
             print "" 
     }' FS='|' file

La salida:

8921,03/20,869,1,2,3,4,5,6
0
27.01.2020, 23:43

Consed:

sed 's/|[^=]*=/,/g; s/|$//; s/,//; s|,|/|2'

O si mny yrno son siempre el segundo y tercer campo (pero se encuentran en ese orden):

sed 's@|mn\(=[^|]*\)|yr=@|mnyr\1/@; s/|[^=]*=/,/g; s/|$//; s/,//'
1
27.01.2020, 23:43

Теги

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