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
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]}"
awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"
?_
comme séparateur de champ? Faites quelques efforts