O mais simples possível:
xargs whatis < cmdlist.txt > cmdinfo.txt
Suponha que eu tenha uma lista de comandos no arquivo de texto como abaixo ( cat cmdlist.txt
): -
cut
lshw
top
awk
sensors
Agora, quero obter informações simples sobre esse comando por whatis cut
, whatis lshw
etc., respectivamente, e imprimir essas imagens de whatis <commadnd>
no arquivo de texto, digamos cmdinfo.txt
Saída desejada 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
Como obtenho o arquivo cmdinfo.txt
com a saída de whatis
para os comandos de cmdlist.txt
Respectivamente?
Esta é apenas amostra de arquivos txt.
Sugira um script simples, se necessário.
O mais simples possível:
xargs whatis < cmdlist.txt > cmdinfo.txt
Muito mais simples,
$ 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
Use o comando abaixo para gravar o resultado em um arquivo.
while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
Muito simplesmente:
for i in $(cat cmdlist.txt); do whatis $i ; done > cmdinfo.txt
Isso percorre todas as entradas ( i
) na saída de $(cat cmdlist.txt)
e executa um whatis
na entrada. Exemplo de saída:
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
N.B. embora em muitos exemplos você encontre i
usado, não é necessário usá-lo - você pode usar a maioria das sequências alfanuméricas simples, por exemplo:
for jnka127nsdn in $(cat input.txt); do whatis $jnka127nsdn ; done
Para fazer isso sem analisar cat
:
while read -r i ; do whatis $i ; done < cmdlist.txt
Algo parecido com isto:
#! /bin/bash
in_file=
out_file=
while read command
do
whatis $command
done < $in_file >> $out_file
Eu escolhi deixar stderr
intocado, pois se você tiver um comando lá para o qual whatis
informação não está disponível, você deve estar ciente disso (e procurar em outro lugar, se necessário).
Acho que você pode obter resultados corretamente com o seguinte comando.
$ for i in 'cat cmdlist.txt';do whatis $i 2>&1;done | sed "s,: nothing appropriate.,,g" > cmdinfo.txt
De fato,
$ for i in 'cat cmdlist.txt';do whatis $i 2>&1;done
O comando, uma parte do primeiro comando, mostrará as seguintes saídas.
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
você pode fazer isso com whatis $(cat cmdlist.txt)
, mas sua saída inclui as seguintes linhas.
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
acima do comando sed
, remova algumas linhas de saída desnecessárias.
A pergunta é alterada como agora.
Se todas as linhas de cmdlist.txt
puderem ser listadas a partir de whatis
, pode usar o seguinte comando como o caminho simples.
whatis 'cat 1.txt' 2>/dev/null > cmdinfo.txt
Se você precisar apenas das linhas que podem ser completamente listadas em whatis
, use o seguinte comando como simpleway.
whatis 'cat 1.txt' > cmdinfo.txt
No entanto, você pode escolher um caminho para vários.