4 votes

Rédaction de scripts pour Linux : Recherche d'un mot clé dans une colonne spécifique

J'ai un gros fichier texte qui contient plusieurs colonnes de données. J'essaie d'écrire un script qui accepte un numéro de colonne et un mot-clé de la ligne de commande et qui recherche les résultats avant d'afficher la ligne entière de toutes les correspondances.

J'ai essayé quelque chose du genre :

grep $fileName | awk '{if ($'$columnNumber' == '$searchTerm') print $0;}'

Mais cela ne fonctionne pas du tout. Suis-je sur la bonne voie ? Merci de votre aide !

2voto

Steve Points 18420

L'option -v peut être utilisée pour transmettre des variables de l'interpréteur de commandes à l'option awk commande.

Ce qui suit peut correspondre à ce que vous recherchez :

awk -v s=$SEARCH -v c=$COLUMN '$c == s { print $0 }' file.txt

EDITAR:

J'essaie toujours d'écrire un code plus élégant et plus serré. Voici donc ce que Dennis veut dire :

awk -v s="$search" -v c="$column" '$c == s { print $0 }' file.txt

0voto

torek Points 25463

Cela semble assez raisonnable. Essayez d'utiliser set -x pour voir exactement ce qui est transmis à l'application awk . Vous pouvez également utiliser des éléments awk différents et/ou plus nombreux, y compris en vous débarrassant du grep séparé :

awk -v colnum=$columnNumber -v require="$searchTerm"
    "/$fileName/ { if (\$colnum == require) print }"

qui fonctionne en définissant des variables awk ( colnum y require dans ce cas), puis en utilisant la chaîne littérale $colnum pour obtenir le champ souhaité, et la variable require pour obtenir la chaîne de caractères requise.

Notez que dans tous les cas (avec ou sans l'option grep ), tout méta-caractère d'expression régulière dans la commande $fileName sera méta-y, par exemple, this.that correspondra au fichier nommé this.that mais aussi le fichier nommé thisXthat .

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