J'ai un tas de documents qui ont tous la ligne, Account number: 123456789
à divers endroits.
Ce que je dois faire, c'est pouvoir analyser les fichiers et trouver le numéro de compte lui-même. Donc, awk
doit rechercher Account number:
et renvoyer la chaîne immédiatement après.
Par exemple, si c'était:
Account number: 1234567
awk
devrait retourner:
1234567
Une fois la première occurrence trouvée, elle peut cesser de chercher.
Mais je suis perplexe. Quelle est la bonne façon de faire cela en utilisant awk
?
Une manière:
awk -F: '$1=="Account number"{print $2;exit;}' file
Je suppose que vous voulez arrêter le moment où vous trouvez la première occurrence dans le fichier. Si vous souhaitez rechercher des occurrences dans chaque ligne du fichier, supprimez simplement la variable exit
.
Vous pouvez utiliser une if
pour vérifier si $1
et $2
correspondent à "Compte" et à "numéro:" Si tel est le cas, imprimez $3
:
> awk '{if ($1 == "Account" && $2 == "number:") {print $3; exit;}}' input.txt
Pour ces correspondances, je préfère utiliser grep
avec look-behind:
grep -Po '(?<=Account number: )\d+' file
ou
grep -Po 'Account number: \K\d+' file
Ceci dit: affiche quelle que soit la séquence de chiffres (\d+
) apparaissant après la chaîne Account number:
.
Dans le second cas, \K
efface la chaîne correspondante, afin qu'elle commence à imprimer après ce \K
.
Voyez-le en action avec un fichier file
:
Account number: 1234567
but then another Account number: 789
and that's all
Voyons à quoi ressemble la sortie:
$ grep -Po '(?<=Account number: )\d+' file
1234567
789
Vous pouvez également utiliser sed -n s///p
:
sed -En 's/^Account number: (.+)/\1/p' *.txt | head -n1