Comment puis-je diviser une ligne qui contient un soulignement avec awk?

Jai cette ligne, mais je veux que chaque partie soit séparée et je veux que cette séparation se fasse avec awk.

Le la ligne dorigine est la suivante:

3302491505_8139829707_13970101.csv 

et ce que je veux comme sortie est:

8139829707 

ou ceci:

3302491505 

Commentaires

  • Est-ce ce que vous voulez: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • non Je veux en imprimer un seul: 8139829707 ou 3302491505
  • quel est le problème de limpression du 1er champ en utilisant _ comme séparateur de champ? Faites quelques efforts

Réponse

Cela pourrait être fait avec cut:

$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707 

Réponse

Essayez ceci:

awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv" 

-F définit le séparateur de champ sur _ ou .. Il permet de définir les champs $1 et $2.

Commentaires

  • ceci imprime la ligne entière

Answer

Ceci imprime toutes les parties individuellement

$ awk -F"[_.]" "{print $1; print $2; print $3; print $4}" <<< "3302491505_8139829707_13970101.csv" 3302491505 8139829707 13970101 csv 

Utilisez simplement le champ de votre choix.

$ awk -F"[_.]" "{ print $3;}" <<< "3302491505_8139829707_13970101.csv" 13970101 

Réponse

echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}" 

Ceci est séparé par _ ou . puis imprimez le champ dont vous avez besoin Il suffit dimprimer

  • $1 pour le premier champ: 3302491505
  • $2 pour le deuxième champ: 8139829707
  • $3 pour le troisième champ: 13970101

Réponse

Les shells de type Bourne ont un moyen intégré de fractionner les chaînes. Cest ce qui se passe lorsque vous laissez une extension de paramètre sans guillemets et la source de tant de bogues lorsque vous ne voulez pas que cela se produise.

Il semblerait donc juste de lutiliser seulement quand cest réellement nécessaire.

IFS=_ # split on _ set -o noglob # leaving a parameter expansion unquoted also # involves filename generation which we don"t want here var=3302491505_8139829707_13970101.csv set -- $var # $var unquoted means its split printf "%s: %s\n" First "$1" Second "$2" Third "$3" 

Certains shells ont des méthodes moins lourdes pour diviser des chaînes.

In zsh:

var=3302491505_8139829707_13970101.csv non_empty_parts=(${(s:_:)var}) parts=("${(@s:_:)var}") 

Ou directement:

printf "%s\n" "Second part: ${${(s:_:)var}[2]}" 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *