ファイルを行ごとに比較するシェルスクリプトをご教授ください。
例えば(master.txt)(a.txt)(b.txt)(c.txt)(ok.txt)(ng.txt)と4つのファイルがあり、
(master.txt)と(a.txt)の行を比較し(a.txt)の中のある行が(master.txt)の行と一致した場合(ok.txt)に
(master.txt)の行と一致しなかった場合(ng.txt)に入れる。
その後(master.txt)と(b.txt)の比較し(a.txt)が使用したものと同じ(ok.txt)or(ng.txt)に入れる・・・
といったように繰り返していくシェルスクリプトはどのようにして作成するのでしょうか?
txtファイルの中の行はランダムに入っており、x.txtの一行一行ををmaster.txtの全行と比較する必要があります。
自分で作ってみたものは、while文を2重で使い一行ずつ取り出しcase文で行が一致した物を(ok.txt)に入れる
所までは成功しているのですが、複数回繰り返す時にどのようなロジックで不一致行を(ng.txt)に入れる
ことができるのかが考え付きませんでした。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
#1です。
うーむ。やりたいことがいまひとつわからないのですが・・・。
case文で比較したいってことがネックなのかな?
※以下はアルゴリズムとして捕らえてください。
シェルの種類とかバージョンで異なると思うし、検証した訳でないので・・・。
-----------------------------------------------------------------
cat /dev/null > ok.txt
cat /dev/null > ng.txt
for fn in a.txt b.txt c.txt ; do
while read line ; do
flg=0
while read line2 ; do
if [ $line = $line2 ]; then
echo $line >> ok.txt
flg=1
break
fi
done < $fn
if [ $flg -eq 1 ]; then
echo $line >> ng.txt
fi
done < master.txt
cp ng.txt master.txt
cat /dev/null > ng.txt
done
-----------------------------------------------------------------
No.4
- 回答日時:
Linux等gnuのgrepだとして、
for f in a.txt b.txt c.txt
do while read data
do if fgrep -s -q -x "$data" master.txt
then echo "$data" >> ok.txt
else echo "$data" >> ng.txt
fi
done < $f
done
No.1
- 回答日時:
> 不一致行を(ng.txt)に入れる
最後までループして一致しなければ(ng.txt)にいれるじゃ駄目なのかな?
単純に1ファイルを引数とする子シェルを作って引数とmaster.txtを比較する。
その親シェルが(a.txt)(b.txt)(c.txt)をループで渡す。
とすれば、そんなに複雑な話じゃないと思うけど。
この回答への補足
すいません、書き間違えていました。
(a.txt)を(ok.txt)や(ng.txt)に入れるのではなく、(master.txt)を(ok.txt)や(ng.txt)に入れて、
2回目より(ng.txt)を(master.txt)にリネームして回そうと考えていたのですが、
(master.txt)を(ng.txt)に入れるロジックが分からないのです。
while文を2重で使いその内側のcase文にて一致を(ok.txt)に入れそれ以外を(ng.txt)にいれると
内側が回転する毎に(master.txt)の一致しない全ての行が(ng.txt)に入ってしまうので、
全て不一致だと(master.txt)の行×(a.txt)の行分(ng.txt)に入ってしまうことになり手詰まりになりました・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) Pythonの質問です テキストファイルをこのように自動生成したいのですがどうすれば良いでしょうか. 2 2022/08/25 21:28
- ライブ・コンサート・クラブ TXT のライブって倍率かなり高いですか? 邦楽のアーティストと比べたら? ジャニーズと比べたら? 1 2023/03/01 07:27
- 邦楽 あいみょん、SEKAI NO OWARI 、Official髭男dism、YOASOBI、TXT、関 3 2023/05/30 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
echo "abc" >> test.txt で、先...
-
FTPのバッチファイルで日付を引...
-
コマンドにてテキストファイル...
-
bat処理の実行結果ログ出力方法...
-
echoの出力の最後のスペースを...
-
シェルスクリプトで複数ファイ...
-
ファイル名の一部を変更するバ...
-
リダイレクト >> を複数のファ...
-
batファイルの結果をテキストに...
-
バッチファイル 指定行の切り出し
-
UNIX ファイル存在チェックの方法
-
バッチファイルで改行の出力
-
Cygwinのリダイレクトでファイ...
-
コマンドプロンプトで標準エラ...
-
シェルから引数を使用してsedコ...
-
フォルダに入っているファイル...
-
エクスプローラのフォルダー内...
-
ACCESSからテキストファイルへ...
-
バッチファイルのfor文の使い方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
バッチファイル 指定行の切り出し
-
echoの出力の最後のスペースを...
-
echo "abc" >> test.txt で、先...
-
バッチファイルで改行の出力
-
コマンドプロンプトで相対パス...
-
【VBA】テキストファイルから特...
-
コマンドプロンプトで標準エラ...
-
コマンド実行結果を環境変数に...
-
batファイルの結果をテキストに...
-
コマンドにてテキストファイル...
-
txtって、 Microsoft Wordの状...
-
bat処理の実行結果ログ出力方法...
-
bashで、gotoのようなラベルに...
-
R18文学賞は400字詰め換算で(2...
-
NULLの置き換えについて
-
FTPのバッチファイルで日付を引...
-
バッチコマンドの「set」で入力...
-
.txtって、縦書きにはならない...
-
バッチファイル 現在のフォルダ...
おすすめ情報