Supprimer le champ pour obtenir la valeur en utilisant awk ou sed

J’ai un fichier texte avec les données suivantes.

\ { Name "ABC", count 378 } \ { Name "DEF", count 5283 } \ { Name "BCD", count 152244 } \ { Name "XYZ", count 5688 } \ { Name "1A2B", count 1749132 } 

Je veux le résultat comme: –

  ABC , 378 DEF , 5283 BCD , 152244 XYZ , 5688 1A2B ,1749132 

J’ai essayé de supprimer les données non révélasortingces en utilisant la commande: –

  grep -e '^ ' result.txt 

Mais je ne peux pas aller au-delà. Est-ce que quelqu’un peut m’aider avec le même?

essayez de suivre awk et faites-moi savoir si cela vous aide.

 awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}' Input_file 

OU

 awk -F'[",]' '/Name/{val=$2;next} /count/{split($0, a," ");print val,a[2]}' OFS=" , " Input_file 

Si vous utilisez un awk qui prend en charge l’expression régulière RS (au moins gawk et mawk), vous pouvez le faire comme ceci:

 awk '!(NR%2) { print $3 " , " $5 }' RS='\\ *{|}' FS='[\n," ]+' infile 

Sortie:

 ABC , 378 DEF , 5283 BCD , 152244 XYZ , 5688 1A2B , 1749132 

Voici un autre awk que vous pensiez pouvoir appliquer,

 $ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file 

Brève explication,

  • $2~/[0-9A-Z]/ : trouve l’enregistrement correspondant à regex [0-9A-Z]
  • gsub(/"/,"",$2) : supprimer " dans le $2 , et ensuite l’imprimer

solution sed :

 sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file 

Le résultat:

  ABC , 378 DEF , 5283 BCD , 152244 XYZ , 5688 1A2B , 1749132