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