J'ai une ligne quelque chose comme
date | v3 | 0,00 | 0,00 | 0,00 | 0 | 0 | 7324.00 | 0,00 | 12278 12276 | Mar 29 janvier 09:36:47
Je veux parcourir cette ligne et former une sortie quelque chose comme ça
["date", "v3", "0.00", "0.00", "0.00", "0", "0", "7324.00", "0.00", "12278 12276", "Mar 29 janvier 09:36:47 "]
ce que je veux réaliser en utilisant le script shell, comment puis-je y parvenir?
4 Réponses :
1ère solution: Pourriez-vous essayer de suivre.
["date" ,"v3" ,"0.00" ,"0.00" ,"0.00" ,"0" ,"0" ,"7324.00" ,"0.00" ,"12278 12276","Tue Jan 29 09:36:47"]
Le résultat sera le suivant.
awk -v s1="\",\"" -v s2="\"" -v s3="\" ,\"" ' { gsub(/ \||\| /,s3) gsub(/\|/,s1) $0="[" s2 $0 s2 "]" } 1 ' Input_file
2ème solution: OU pour gérer les espaces inégaux, essayez de suivre.
awk -v s1="\",\"" -v s2="\"" -v s3="\" ,\"" '{gsub(/ \||\| /,s3);gsub(/\|/,s1);$0="[" s2 $0 s2 "]"} 1' Input_file
OU (une forme non-une ligne de ci-dessus):
["date ","v3"," 0.00"," 0.00"," 0.00"," 0"," 0"," 7324.00"," 0.00"," 12278 12276","Tue Jan 29 09:36:47"]
La sortie sera comme suit.
awk -v s1="\",\"" -v s2="\"" '{gsub(/\|/,s1);$0="[" s2 $0 s2 "]"} 1' Input_file
Vous semblez contenir des informations dans une structure de liste [..]
qui est tout à fait synonyme d'une construction en Python qui n'est pas facilement implémentée dans bash
(qui a des tableaux) ou Awk
.
Vous pouvez simplement faire ce qui suit
import json str='date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47' split_str = str.split("|") wo_spaces = [ str.strip() for str in split_str ] print( json.dumps( wo_spaces ) ) ["date", "v3", "0.00", "0.00", "0.00", "0", "0", "7324.00", "0.00", "12278 12276", "Tue Jan 29 09:36:47"]
Une manière sed
simple:
["date","v3","0.00","0.00","0.00","0","0","7324.00","0.00","12278 12276","Tue Jan 29 09:36:47"]
Sortie:
sed 's/\s*|\s*/","/g;s/^/["/;s/$/"]/'
Utilisation de Perl
$ export a='date |v3| 0.00| 0.00| 0.00| 0| 0| 7324.00| 0.00| 12278 12276|Tue Jan 29 09:36:47' $ echo $a | perl -F"\s*\|\s*" -lane ' $_="\x22".$_."\x22" for(@F); print "[",join(",",@F),"]" ' ["date","v3","0.00","0.00","0.00","0","0","7324.00","0.00","12278 12276","Tue Jan 29 09:36:47"] $
Lequel souhaitez-vous utiliser? Un script shell ou une structure Python pour contenir une liste?