Je dois mettre dans une variable bash la première ligne d'un fichier. Je suppose que c'est avec la commande grep, mais est-ce un moyen de restreindre le nombre de lignes?
head
prend les premières lignes d'un fichier et le paramètre -n
peut être utilisé pour spécifier le nombre de lignes à extraire:
line=$(head -n 1 filename)
pour lire la première ligne à l’aide de bash, utilisez la commande read
. par exemple
read -r firstline<file
firstline
sera votre variable (pas besoin d'attribuer à un autre)
Cela suffit et stocke la première ligne de filename
dans la variable $line
:
read -r line < filename
J'aime aussi awk
pour cela:
awk 'NR==1 {print; exit}' file
Pour stocker la ligne elle-même, utilisez la syntaxe var=$(command)
. Dans ce cas, line=$(awk 'NR==1 {print; exit}' file)
.
Ou même sed
:
sed -n '1p' file
Avec l'équivalent line=$(sed -n '1p' file)
.
Voir un exemple lorsque nous alimentons la read
avec seq 10
, c'est-à-dire une séquence de nombres de 1 à 10:
$ read -r line < <(seq 10)
$ echo "$line"
1
$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1
line=$(head -1 file)
Travaillera bien. (Comme réponse précédente). Mais
line=$(read -r FIRSTLINE < filename)
sera légèrement plus rapide que read
est une commande intégrée de bash.
Juste echo
la première liste de votre fichier source dans votre fichier cible.
echo $(head -n 1 source.txt) > target.txt
La question ne demandait pas ce qui était le plus rapide, mais pour ajouter à la réponse sed, -n '1p' fonctionne mal, car l'espace de modèle est toujours analysé sur des fichiers volumineux. Par curiosité, j'ai trouvé que 'head' l'emporte de peu sur sed:
# best:
head -n1 $bigfile >/dev/null
# a bit slower than head (I saw about 10% difference):
sed '1q' $bigfile >/dev/null
# VERY slow:
sed -n '1p' $bigfile >/dev/null