8
votes

Variable pour le nombre de lignes dans un fichier

J'essaie de mettre le nombre de lignes dans un fichier dans une variable entière.

C'est comme ça que je le fais xxx

où 1 $ est La ligne de commande arg

Le problème est que WC -L donne un numéro et le nom de fichier comme: 5 bla

est un moyen de mettre le nombre en x?


0 commentaires

7 Réponses :


12
votes

vous pourriez faire chat $ 1 | wc -l à la place.

ou WC -L $ 1 | Cut -D "" -F 1 .


2 commentaires

Merci! Pouvez-vous expliquer comment Cat $ 1 | WC -L fonctionne? Si cela ne vous dérange pas


Non doute que Oli mettra à jour la réponse, mais c'est fondamentalement que, si wc ne connaît pas le nom de son fichier d'entrée (tel que lorsque l'entrée entrait via une entrée standard), elle n'imprime pas ce.



2
votes
wc -l $1 | awk '{print $1}'
with awk

0 commentaires

1
votes

ou avec sed ... xxx

ou, en supposant que le premier espace est celui après le numéro: xxx


4 commentaires

Hmm, pas comme lisible comme les autres, mais je me suis promis que j'avais upvote toute solution qui utilise deux processus ou moins de processus :-) Il aurait peut-être été plus facile de supprimer le premier espace: S /. * $ // plutôt que d'utiliser la substitution de registre.


: D Merci ... Maintenant que je vois les autres réponses, il se sent laide, mais la première chose qui est tombée dans ma tête. La ligne commence par des espaces, de sorte que la suppression du premier espace ne fonctionnerait pas.


wc sortie commence par des espaces? Dans quel système d'exploitation êtes-vous? La mienne est assise sur la gauche.


OSX, je suppose qu'un autre moyen Mac BSD est génial



2
votes

Vous pouvez utiliser la coquille pour supprimer le nom du fichier. Cela a l'avantage de ne pas démarrer un 2e processus comme cat code>, couper code>, sed code> ou awk code>:

#var=$(wc -l _your_file_)
var="   3    file"
var=$(echo $var)
nb_lines=${var%% *}


0 commentaires

12
votes
x=$(wc -l < "$1")
This avoids a useless use of cat and any forks, and would work on a path containing spaces and even newlines.

0 commentaires

0
votes

Si vous essayez de mettre des numéros de ligne dans le fichier que je recommande.

dans Windows: xxx

sous Linux: xxx

Je les ai séparé parce que dans Windows, on ne peut pas exécuter Cat -N a donc dû utiliser AWK.


0 commentaires

0
votes
filename=’test.txt'
line_no=$(cat ${filename} | wc -l)
echo ${line_no}

0 commentaires