Comment vérifier qu'un fichier contient plus d'une ligne dans une condition BASH?
J'ai besoin de vérifier si un fichier a plus de 1 ligne. J'ai essayé ceci:
if [ `wc -l file.txt` -ge "2" ]
then
echo "This has more than 1 line."
fi
if [ `wc -l file.txt` >= 2 ]
then
echo "This has more than 1 line."
fi
Ces juste de signaler les erreurs. Comment puis-je vérifier si un fichier a plus de 1 ligne dans un BASH conditionnelle?
source d'informationauteur Village
Vous devez vous connecter pour publier un commentaire.
La commande:
va générer des sorties comme:
avec
wc
utilement vous dire le nom de fichier. Elle le fait dans le cas où vous êtes à la vérification d'un lot de fichiers à la fois et souhaitez individu ainsi que l'ensemble des stats:Vous pouvez arrêter
wc
de le faire en fournissant ses données sur l'entrée standard, de sorte qu'il n'est pas savoir le nom de fichier:La transcription suivante montre en action:
Que d'un côté, vous remarquerez que j'ai également passé à l'aide de
[[ ]]
et$()
.Je préfère l'ancien, car il a moins de problèmes en raison de compatibilité (notamment avec de la ficelle de fractionnement) et le second parce qu'il est beaucoup plus facile de nid exécutables.
Un pur bash (≥4) possibilité à l'aide de
mapfile
:La
mapfile
builtin magasins de ce qu'il lit à partir destdin
dans un tableau (MAPFILE
par défaut), une ligne par champ. À l'aide de-n 2
fait de lire plus de deux lignes (pour l'efficacité). Après cela, vous avez uniquement besoin de vérifier si la matrice deMAPFILE
a plus qu'un seul champ. Cette méthode est très efficace.Comme un sous-produit, la première ligne du fichier est stocké dans
${MAPFILE[0]}
dans le cas où vous en avez besoin. Vous verrez que la fuite caractère de saut de ligne n'est pas coupé. Si vous avez besoin de supprimer la fin caractère de saut de ligne, utilisez le-t
option:Comment sur:
La
-r
drapeau est nécessaire pour assurer la continuation de ligne de caractères ne pas plier deux lignes en une seule, ce qui entraînerait le fichier suivant pour signaler une ligne seulement:Vous devriez toujours vérifier ce que chaque sous-commande retourne. Commande
wc -l file.txt
renvoie une sortie dans le format suivant:Vous avez besoin d'abord de la colonne, vous pouvez l'extraire avec
awk
oucut
ou tout autre utilitaire de votre choix.