Voici la sortie:
3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720
J'ai essayé avec 2 scénarios:
Stockage dans un tableau
@arr=split(',',$stats); echo "statistics: $stats"
Stockage dans une variable
echo $stats | cut -d ',' -f | read s1 echo $s1
Mais aucun des deux scénarios ne fonctionne.
awk '{ split("3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720 ",arr,","); print arr[1]; }'
OUecho "3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720" | awk '{ split($0,arr,","); print arr[1]; }'
Cela devrait fonctionner.Réponses:
Vous pouvez utiliser quelque chose comme ça, pour une seule ligne d'entrée:
Démo:
Crédits: Split string basé sur le délimiteur dans bash? réponse de Johannes Schaub . Vérifiez également les autres réponses.
la source
Votre premier extrait de code n'a rien à voir avec la syntaxe du shell. C'est une syntaxe Perl correcte.
Votre deuxième extrait de code ne fonctionne pas
cut
correctement; Je ne sais pas ce que tu voulais.Le shell a une construction de fractionnement de chaîne intégrée: lorsque vous écrivez
$somevar
sans guillemets, le shell recherche d'abord la valeur de la variablesomevar
, puis divise cette valeur en mots séparés sur les caractères spécifiés parIFS
, et interprète enfin chaque mot comme un glob modèle (fichier joker). Vous pouvez donc diviser une chaîne en définissantIFS
le caractère séparateur et en désactivant temporairement la globalisation.Notez que si un champ contient un espace, l'élément de tableau conservera cet espace. Si vous souhaitez séparer tous les espaces ainsi que les virgules, définissez
IFS=', '
. Notez que ceIFS
n'est pas une chaîne à diviser mais un ensemble de caractères à diviser; un espace ou une virgule constituera un séparateur. En outre, il existe des règles spéciales pour les espaces blancs: toute séquence de zéro ou plusieurs espaces suivie d'une virgule suivie de zéro ou plusieurs espaces constituera un séparateur, et toute séquence d'un ou plusieurs espaces constituera également un séparateur.Si vous souhaitez uniquement supprimer les espaces au début ou à la fin d'un champ, vous devrez le faire élément par élément.
la source
la source