231 votes

scinder la chaîne en tableau avec awk

Comment diviser la chaîne lorsqu'elle contient des symboles de canal | . Je veux les séparer pour être dans le tableau.

j'ai essayé

 echo "12:23:11" | awk '{split($0,a,":"); print a[3] a[2] a[1]}'
 

Ce qui fonctionne bien. Si ma chaîne ressemble à "12|23|11" comment puis-je les scinder en tableau?

357voto

As-tu essayé:

 echo "12|23|11" | awk '{split($0,a,"|"); print a[3],a[2],a[1]}'
 

21voto

Dimitre Radoulov Points 9185

S'il vous plaît être plus précis! Que voulez-vous dire par "ça ne marche pas"? Postez la sortie exacte (ou le message d'erreur), votre version du système d'exploitation et awk:

 % awk -F\| '{
  for (i = 0; ++i <= NF;)
    print i, $i
  }' <<<'12|23|11'
1 12
2 23
3 11
 

Ou, en utilisant split:

 % awk '{
  n = split($0, t, "|")
  for (i = 0; ++i <= n;)
    print i, t[i]
  }' <<<'12|23|11'
1 12
2 23
3 11
 

Éditer: sous Solaris, vous devez utiliser le awk POSIX ( / usr / xpg4 / bin / awk ) pour traiter correctement 4 000 champs.

5voto

duedl0r Points 3508

Blague? :)

Que diriez-vous de echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'

Ceci est ma sortie:

 p2> echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'
112312
 

donc je suppose que ça marche après tout ..

5voto

codaddict Points 154968
 echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'
 

devrait marcher.

4voto

Schildmeijer Points 10975
echo "12|23|11" | awk '{split($0,a,"|"); print a[3] a[2] a[1]}'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X