🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

3回答

4499閲覧

while read line で複数ファイルから文字列をgrepし出力する方法

meli

総合スコア312

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

1グッド

0クリップ

投稿2019/11/20 07:37

編集2019/11/20 08:20

前提・実現したいこと

かなり初歩的な質問になることをお詫びいたします。

Linux上で、各サーバのAディレクトリにあるBファイルの中から"C"という文字列を出力したいです。

背景

各サーバでシェルを実行した後に、シェルが正しい動作で完了したのか確かめるため、作業ログに「正常終了しました」という文字列があるかどうかを確認したいです。

各サーバの/A/B/LOG/(サーバ名)_YYYYMMDD.logというログが検索対象です。
(各サーバ同じパスです)

検索する文字列は「正常終了しました。」です。

発生している問題・エラーメッセージ

一つのサーバ上で

rsh サーバ名 cat (サーバ名)_YYYYMMDD.log | grep "正常終了しました。"

と打って確認するものを、while read line などで一括処理したい所存です。

ホスト名一覧を記載したテキストファイルをワークディレクトリの中に置いた後にどうすればよいか分かりません。

echo hostname.txt |while read line do echo "$line" コマンド done

検索したのですが、上記のような形で躓き、途方にくれております。

melmelmel👍を押しています

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

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

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

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

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

y_waiwai

2019/11/20 07:51

質問がちと意味不明です 実例もを示して、どういう動作をさせたいのか説明しましょう
meli

2019/11/20 09:56 編集

y_waiwai 様 ありがとうございます。 あまりにも初心者で書き方すら分からず申し訳ないです。 詳細を記載して修正したのですがこちらでなんとなく伝わりますでしょうか。
guest

回答3

0

リストファイルが存在するのであれば、自分なら

cat hostname.txt | xargs grep "終了しました"

と思ったらrshでホスト一覧ですか。
ならループしたほうが手っ取り早いですね。

for var in `cat hostname.txt` ; do rsh $var -n "grep '正常終了しました' /path/to/log/*_`date +"%Y%m%d"`.log" ; done

投稿2019/11/20 16:19

編集2019/11/20 16:29
KeisukeKoga

総合スコア125

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

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

0

自己解決

恐らく綺麗ではないですが解決いたしました。
cat ホスト名一覧.txt | awk '{print $2}' | while read line
do
rsh $line -n "cat /A/B/C_$( date +"%Y%m%d" ).log | grep "正常終了しました" "
ls -l /A/B
done

投稿2019/11/20 10:52

meli

総合スコア312

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

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

0

grepとシェルのファイルグロブを使ってみるのはどうでしょう。
一例として

bash

1$ grep C *_X.log

投稿2019/11/20 07:54

TaniguchiTakaki

総合スコア171

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問