web-dev-qa-db-fra.com

Il fallait un script / boucle / commande simple pour entrer une commande, une exécution et une sortie dans les fichiers texte

Supposons que j'ai la liste des commandes dans le fichier texte comme ci-dessous (cat cmdlist.txt): -

cut
lshw
top
awk
sensors

Maintenant, je veux obtenir des informations simples sur cette commande par whatis cut, whatis lshw etc. respectivement et imprimer ces sorties de whatis <commadnd> dans un fichier texte, par exemple cmdinfo.txt

Sortie souhaitée de cmdinfo.txt (cat cmdinfo.txt): -

cut (1)              - remove sections from each line of files
lshw (1)             - list hardware
top (1)              - display Linux processes
awk (1)              - pattern scanning and text processing language
sensors (1)          - print sensors information

Comment puis-je obtenir le fichier cmdinfo.txt avec la sortie de whatis pour les commandes de cmdlist.txt respectivement?

Ceci est seulement exemple fichiers txt.

Suggérez un script simple si nécessaire.

5
Pandya

Aussi simple que possible:

xargs whatis < cmdlist.txt > cmdinfo.txt
9
Radu Rădeanu

Beaucoup plus simple,

$ while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
cut (1)              - remove sections from each line of files
lshw (1)             - list hardware
top (1)              - display Linux processes
awk (1)              - pattern scanning and text processing language
sensors (1)          - print sensors information

Utilisez la commande ci-dessous pour écrire le résultat dans un fichier.

while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
5
Lety

Très simplement:

for i in $(cat cmdlist.txt); do whatis $i ; done > cmdinfo.txt

Cela parcourt chaque entrée (i) de la sortie de $(cat cmdlist.txt) et exécute une whatis à chaque entrée. Exemple de sortie:

cut (1)              - remove sections from each line of files
lshw (1)             - list hardware
top (1)              - display Linux processes
awk (1)              - pattern scanning and processing language
sensors (1)          - print sensors information

NB. Même si dans de nombreux exemples, vous trouverez i utilisé, vous n'êtes pas obligé de l'utiliser - vous pouvez utiliser la plupart des chaînes alphanumériques simples, par exemple:

for jnka127nsdn in $(cat input.txt); do whatis $jnka127nsdn ; done

Pour le faire sans analyser cat:

while read -r i ; do whatis $i ; done < cmdlist.txt
3
Wilf

Quelque chose comme ça:

#! /bin/bash
in_file=$1
out_file=$2

while read command
do
    whatis $command 
done < $in_file >> $out_file

J'ai choisi de laisser stderr intacte, car si vous avez une commande pour laquelle whatis aucune information n'est disponible, vous devez en être informé (et regarder ailleurs, si nécessaire).

2
muru

Je pense que vous pouvez obtenir correctement le résultat avec la commande suivante.

$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done | sed "s,: nothing appropriate.,,g" > cmdinfo.txt

En réalité,

$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done

La commande, la première partie de la commande affichera les sorties comme suit.

cut (1)              - remove sections from each line of files
lshw (1)             - list hardware
top (1)              - display Linux tasks
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
tr (1)               - translate or delete characters

vous pouvez le faire avec whatis $(cat cmdlist.txt), mais sa sortie inclut les lignes suivantes.

.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.

au-dessus de la commande sed, supprimez certaines lignes de sortie inutiles.

Question est modifié comme maintenant. Si toutes les lignes de cmdlist.txt peuvent être répertoriées à partir de whatis, vous pouvez utiliser la commande suivante comme moyen simple.

whatis `cat 1.txt` 2>/dev/null > cmdinfo.txt

Si vous avez juste besoin des lignes qui peuvent être complètement listées de whatis, vous pouvez utiliser la commande suivante comme méthode simple.

whatis `cat 1.txt` > cmdinfo.txt

Cependant vous pouvez choisir un moyen parmi plusieurs.

2
xiaodongjie