Necessário script / loop / comando simples para comando de entrada, execução e saída em arquivos de texto

5

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.

    
por Pandya 13.07.2014 / 11:26

5 respostas

9

O mais simples possível:

xargs whatis < cmdlist.txt > cmdinfo.txt
    
por Radu Rădeanu 13.07.2014 / 12:21
5

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
    
por Lety 13.07.2014 / 11:35
3

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
    
por Wilf 13.07.2014 / 11:35
2

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).

    
por muru 13.07.2014 / 11:38
2

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.

    
por xiaodongjie 13.07.2014 / 11:41