Je grep souvent des fichiers CSV avec des noms de colonne sur la première ligne. Par conséquent, je veux que la sortie de grep inclue toujours la première ligne (pour obtenir les noms de colonnes) ainsi que toutes les lignes correspondant au modèle grep. Quelle est la meilleure façon de procéder?
Réponses
Trop de publicités?grep n'a pas vraiment de concept de numéro de ligne, mais awk le fait, alors voici un exemple de lignes de sortie contenant "Incoming" - et la première ligne, quelle qu'elle soit :
awk 'NR == 1 || /Incoming/' foo.csv
Vous pourriez faire un script (un peu excessif, mais). J'ai créé un fichier, grep+1, et j'y ai mis ceci :
#!/bin/sh
pattern="$1" ; shift
exec awk 'NR == 1 || /'"$pattern"'/' "$@"
Maintenant on peut :
./grep+1 Incoming
edit : a supprimé le "{print;}", qui est l'action par défaut d'awk.
Vous pouvez utiliser sed
au lieu de grep
pour faire ceci :
sed -n -e '1p' -e '/pattern/p' < $FILE
Cela imprimera la première ligne deux fois, cependant, si elle contient le motif.
-n
indique à sed
ne pas imprimer chaque ligne par défaut.
-e '1p'
imprime la première ligne.
-e '/pattern/p'
imprime chaque ligne correspondant au motif.