質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

3回答

1162閲覧

awkで1項目目でコマンドを実行したあと、2項目目を単純に表示させる方法

fort

総合スコア5

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2020/04/30 18:49

前提・実現したいこと

本当にごくごく初心的な質問になると思うのですが、ご容赦ください。
独学で行き詰まっているので、回答頂けると大変助かります。

$ cat myhost.txt 192.168.1.1 router 192.168.1.5 windows 192.168.1.12 linux というテキストファイルから、1項目目のIPアドレスを抜き出して ping し、結果をIPアドレスではなく、2項目目のディバイス名を表示させるスクリプトを書こうとしてるのですが、うまく行きません。 1項目目のIPアドレスの表示は以下の様にすることが出来ました。 #!/bin/bash for IP in `awk '{print $1}' ${HOSTS}` do ping -c1 ${IP} >dev/null 2>&1 if [ $? -eq 0 ] ; then echo "${IP} is OK" else echo "${IP} is NOT OK" fi done

試したこと

これで、IPアドレスが一つづ ping されて、

192.168.1.1 is OK
192.168.1.5 is OK
192.168.1.12 is NOT OK

と返ってきます。これを

192.168.1.1 router is OK

の様に、2項目目の値を入れるには、このスクリプトをどう改正すればいいでしょうか?
散々いろいろ思いついたことを試してみたのですが、もう何日もここで行き詰まってしまっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

otn さんのが素直で分かりやすいと思いますが参考までに

#!/bin/bash function ipcheck() { ping -c1 $1 >dev/null 2>&1 if [ $? -eq 0 ] then echo 'OK' else echo 'NOT OK' fi } cat $HOSTS | \ while read ip name do echo "$ip $name is `ipcheck $ip`" done

投稿2020/04/30 23:18

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fort

2020/05/01 12:31

なるほど、そういう使い方もあるのですね。大変勉強になりました。ありがとうございました。
guest

0

ベストアンサー

sh

1#!/bin/bash 2 3while read IP NAME 4do 5ping -c1 ${IP} >dev/null 2>&1 6 if [ $? -eq 0 ] ; then 7 echo "${IP} ${NAME} is OK" 8 else 9 echo "${IP} ${NAME} is NOT OK" 10 fi 11done < myhost.txt

投稿2020/04/30 22:42

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fort

2020/04/30 23:04

ありがとうございました!! この1週間以上色々な事を試してみたのに、while に変数を2つ入れる事が出来るとは思いもしませんでした!  こんなに簡単な解決法があるとは、目から鱗とはまさにこの事でした! 本当にありがとうございました。
guest

0

awkの中でpingを実行させればいいのでは。

awk '{x=system("ping -c1 " $1 " >/dev/null 2>/dev/null"); printf "%s %s is %sok\n", $1, $2, (x==0)?"":"not "}' myhost.txt

投稿2020/04/30 19:38

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fort

2020/04/30 20:39

早速の回答、ありがとうございました。1時間ほど、頂いた回答とにらめっこをして解読に試みてみたいのですが、当方、ド素人もいいところで、最近Linixuに触り始めたばかりというレベルでして、どうにも頂いた回答の内容が解読できずにいます。 もう少しだけ、詳細の説明を頂けると本当に助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問