web-dev-qa-db-ja.com

テキストファイル内の入力コマンド、実行、および出力に必要な簡単なスクリプト/ループ/コマンド

以下のようなテキストファイルにコマンドのリストがあると仮定します(cat cmdlist.txt):-

cut
lshw
top
awk
sensors

ここで、whatis cutwhatis lshwなどによってそのコマンドの簡単な情報を取得し、whatis <commadnd>のこれらの出力をcmdinfo.txtと言うテキストファイルに出力したい

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

cmdinfo.txtからのコマンドに対してwhatisの出力でcmdlist.txtファイルを実現するにはどうすればよいですか?

これはsample txtファイルのみです

必要に応じて、簡単なスクリプトを提案してください。

5
Pandya

可能な限りシンプル:

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

もっとシンプルなもの、

$ 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

以下のコマンドを使用して、結果をファイルに書き込みます。

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

非常に簡単に:

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

これは、$(cat cmdlist.txt)の出力のすべてのエントリ(i)をループし、エントリでwhatisを実行します。出力例:

_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。多くの例でiが使用されていることがわかりますが、使用する必要はありません-ほとんどの普通の英数字文字列を使用できます-例:

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

catを解析せずに実行するには:

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

このようなもの:

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

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

stderr情報が利用できないコマンドがある場合は、whatisをそのままにしておくことを選択しました。それを認識しておく必要があります(必要に応じて他の場所を見てください)。

2
muru

次のコマンドで適切な結果を得ることができると思います。

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

実際には、

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

コマンド、最初のコマンドの一部は、次のように出力を表示します。

_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
_

whatis $(cat cmdlist.txt)で実行できますが、出力には次の行が含まれます。

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

上記のsedコマンドは、不要な出力行を削除します。

質問は今と変わります。 _cmdlist.txt_のすべての行をwhatisからリストできる場合、次のコマンドを簡単な方法として使用できます。

_whatis `cat 1.txt` 2>/dev/null > cmdinfo.txt
_

whatisから完全にリストできる行だけが必要な場合は、次のコマンドを単純な方法として使用できます。

_whatis `cat 1.txt` > cmdinfo.txt
_

ただしさまざまな方法のいずれかを選択できます。

2
xiaodongjie