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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

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

Q&A

解決済

1回答

7035閲覧

2つのファイルを比較するシェルが作れない

chappy73

総合スコア13

Linux

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

0グッド

0クリップ

投稿2017/11/27 10:27

編集2017/11/27 10:34

現場で、ある定義ファイルを変更する作業を自動化するという試みをしており、その中で変更前と変更後の差分取得のシェル作成に手間取っています。具体的には
①bef.txtファイルとaft.txtファイルをif文で1行ずつ比較する。
②差分があった場合、aft.txtの該当行と、事前に用意した変更部分のみ記載したaft2.txtを1行ずつ比較する。
③差分が無ければ途中となっている①の処理に戻る。

これにより変更されるべき部分が正しく変更されたこと、変更されてはいけない部分が変更されていないことの2点が証明できることが目的です。

###発生している問題・エラーメッセージ
・1行ずつ処理する場合、行番号を変数に入れて1ずつ増加していく方法を
取ると思うが、「1行目から最終行まで」と指定する方法がわからない。
・上記②の部分の処理方法がわからない。

###該当のソースコード
for Num in seq 100
do
bef1=sed -n "$Num"P "/work/bef1.txt"
aft1=sed -n "$Num"P "/work/aft1.txt"
if [ $bef1 = $aft1 ];then
echo "OK"
else
echo"NG"
fi
done
###試したこと

半日ネットで調べたのですが、for文にてループ、if文にて比較というところまでしかわかりませんでした。初心者のため、1行ずつ行番号を変数に格納し引数に指定する。if文で比較する。と分けてもここまでしか考えられませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Linuxのシェルスクリプト

【追記】
diffコマンドだと、ある特定条件下で正常に作動しないことが過去にあったようです。何故正常に作動しなかったかは不明で、調べても何もヒットしなかったのですが、過去にその事例があったため今回はif文での比較をしたいと考えています。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

自作する必要はないと思います。diffコマンドを使ってください。

投稿2017/11/27 10:30

KojiDoi

総合スコア13671

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

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

chappy73

2017/11/27 10:39

KojiDoiさん 早速の回答ありがとうございます。 diffコマンドだと、ある特定条件下で正常に作動しないことが過去にあったようです。何故正常に作動しなかったかは不明で、調べても何もヒットしなかったのですが、過去にその事例があったため今回はif文での比較をしたいと考えています。
gitya107

2017/11/27 11:58

正常に作動しなかった理由が不明確であり、根拠が無いためKojiDoiさんの提示されたdiffを使われるのが良いと思います。OSの標準コマンドですので、それを超えるような品質のプログラムを作る方が大変かと。 diffが正常でないということであれば、世の中の企業の大多数が大変なことになります。
KSwordOfHaste

2017/11/27 12:27

KojiDoiさんやgitya107さんに同意ですが、理由をより明確に述べようとするなら・・・ 「diffが正常に動作しなかった原因が不明のまま別の方法を使う場合、何をもってdiffの不具合を回避できたか根拠がない」 と言えそうです。原因が曖昧なら何を使っても(sedを使おうがawkを使おうがbashを使おうが)何も変わらない気がします。
k-nishiyama

2017/11/28 04:56

どちらかというと"diffコマンドが、ある特定条件下で正常に作動しない"といった内容でスレッドを挙げた方がまだ建設的かと思います。 "-i" や "-b"オプションのような特定の差分を無視するオプションを 理解しないまま利用して「差分が確認できない!」と仰られている可能性が高いと予想しています。 絶対に無いとまでは言い切れませんが、diffのように使い込まれたコマンドにおいて そのコマンドが利用できないようなバグが存在するならば「調べても情報が出てこない」ようなことは今日日発生しないと考えられます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問