
Windowsマシンから unix マシンへ巨大なテキストファイルを ftp をした後、両者の内容が同じである事を確認したいと思っています。
ただし「同じ」といっても Windowsは改行コードが CrLfで unixの改行コードは Lfなのでただ、それぞれのファイル全体のチェックサムを「同じ結果か出るツール」を使っても相違が出てしまいます。
なので「改行コード部分を除いた」実テキスト内容についてのチェックサムを、出力できるツールまたは c言語のソースプログラムを探しています。
そうすれば Windows側 と unix側のチェックサムは一致するはずです。
ファイルが巨大なのでいったん改行を除くなどのフィルターを通すと、数時間の処理時間がかかってしまうので、一回の読み込みでチェックサムを出力したいです。
c言語で自作も考えていますが、ゼロから考えると大変なのでサンプルプログラムでも良いので教えてください。
(セキュリティ上、実行環境がネットから遮断されているので、手で打ち込める短めのソースが良いです)
No.5ベストアンサー
- 回答日時:
md5sumとか
https://en.wikipedia.org/wiki/Md5sum
sha1sumとか
https://ja.wikipedia.org/wiki/Sha1sum
がUnix側にあれば、Windowsに用意して、
・Windowsでtextモードでハッシュを計算→Unix上で確認
という使い方でいいはずです。
あとは、運用次第なんですが
Unixでは、パイプで継ぐと、ほぼ並列に実行される上、中間ファイルを経由しないので、
「あらかじめCRLF→LFに変換したファイルを読み込み処理」
するとの
「CRLFのファイルをLFに変換して標準出力 | 標準入力から読み込み処理」
するのとで、致命的なパフォーマンス低下は無いはずです。
200GB一気に保存しないとならないのでしょうか?
適当な長さで分割して保存すれば、もう少しいろいろ楽ができると思うのですが。
ご回答ありがとうございます。
弊社では 200GB以上のファイルを毎月2000回、全件検索処理をしています。
いわゆるビッグデータの処理ですが単なる傾向分析ではなく、正確な数値が求められています。
(なので標本化、少ないデータで(サンプリング処理)が出来ない)
何のために正確さが必要かと言われると「あまり意味がない」と私個人は思っていますが、会社の方針なので仕方ありません。
過去に再処理データの取違い (間違って古いデータを使ってしまった) があり、責任問題となった事があり 200GBのファイルを分割もしくは正規化する案は、私もアイデアとしては持っていますが、危険を感じるのでやりたくないところです。
パイプ利用のアイデアは実験をしてみたいと思います。
パフォーマンステストを、これからテストマシンで行う予定です。
ただ、将来は unixマシンを Windows化するアイデアもあり、効果があっても実装するかどうかはわかりません。
(Windowsは実質、マルチプロセスにならない ?)
余談ですが 3年後には、合計20テラバイトのSSDディスクシステムを買ってもらおうと、提案していますがまだまだ高いので却下されそうです。
No.4
- 回答日時:
>ファイルサイズが 数百GB 単位なので、変換処理だけでも小一時間かかってしまいます。
コレでちゃんと動作するかは不明ですけど……。
>c言語で自作も考えていますが、ゼロから考えると大変なのでサンプルプログラムでも良いので教えてください。
>(セキュリティ上、実行環境がネットから遮断されているので、手で打ち込める短めのソースが良いです)
手打ちもチト厳しいところですが…
https://www.ipa.go.jp/security/rfc/RFC1321JA.html
辺りでMD5チェックサムのサンプルが入手できます。
で、MD5Init()で初期化しておいてfopen()でテキストモードでオープンし、
fgets()で1行読み込んではMD5Update()で1行分のデータをハッシュに通して、
全行読み込み終わったらMD5Final()でダイジェストを取得する。
というのでどうですかね?
Windows側もfopen()のテキストモードであれば、改行は'\n'に変換されることになるかと。
数百GBのファイルをfopen()で開けるか?という問題は残りますけど。
回答ありがとうございます。
全部を打ち込むのは大変ですが、教えて頂いたサンプルを応用すれば何とかなりそうです。
c言語はできますので大丈夫です。
数百GBのファイルを、fopen()で開く事ができました。
No.3
- 回答日時:
>ftpで転送時に改行コードを変換しながら、後でチェックサムをとるときに違いを吸収するのが最短
本当にそうでしょうか?実測しましたか?
転送時に変換がかかるということは転送時にオーバーヘッドは発生しています
論理的には、変化して転送も、転送しながら変換も、変換後転送もほぼおなじ時間に
なるはずでは?
回答ありがとうございます。
実測するとディスク I/Oに時間がかかっているようです。
なので JOB ステップを分けると、時間が倍かかります。
しかし他の方の回答で「パイプ処理なら時間が増えないかも」とのご指摘がありましたので試してみる予定です。
No.1
- 回答日時:
>Windowsマシンから unix マシンへ巨大なテキストファイルを ftp をした後、
これが逆なら、Internet Explorerでできるんだけどなあ。
UNIX/Linuxの2バイト文字を含んだテキストファイルを変換するときによく使う技なんですけど…。
Windowsパソコンの上で、ファイルの拡張子を「.TXT」から「.TXT0」のようにIEがテキストファイルと認識できないものに変えたのちに
開いているIEのウインドウへ「.TXT0」ファイルをドロップすると、IEの中で普通にファイルが開かれます。(←これ、意外と知られていなかったりするんです)
続いてIEで「ファイル名を付けて保存」し直すんです。TEXTファイルとして。
その時、エンコードをShift JISとすればJISコードはShift JISコードに置き換わり、改行コードはLfからCr+Lfに置き換わります。
これでWindowsのメモ帳などで文字化けを起こしていたテキストファイルをこれで文字化けさせることなく表示ができるようになる。
…と言う事なんですが、
これを逆にエンコードをJISにして保存し直しても改行コードまでは変わらなかったと思うんですよ。たしか...。
・・・
そんなわけで、UNIXのファイルを一度Windowsへ移して、IEでShift JISで保存し直した後のファイルでUNIXシステム上で比較するという
面倒なことになりますね。
このやり方なら別途プログラムを用意することなく実施できるので、多少の手間を問わないならお勧めできます。
・・・余談・・・
このやり方、実は結構古くて知っている人は知っているんです。
(自分はUNIX系システムをいじっていた2000年頃、IE5とIE6でこのやり方を確認しています)
IE11にも同じオプションがあるので機能は変わらないと思います。
ただ、エンコードをJISにしたときに改行コードがLfになるかは分かりません。
ご回答ありがとうごさいます。
残念ながら仕事場のサーバーWindows機はセキュリティが厳しくて IE を起動できません。
しかし、ご回答は自宅での趣味の別の操作で役に立ちそうです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 改行コードについて 4 2022/08/13 14:20
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelからtextへ変換する際の出...
-
受信メールを一括してテキスト...
-
テキストファイルについてのプ...
-
テキストファイルを検索・編集...
-
テキストファイルを読み込んで...
-
オンラインコンパイラーを使っ...
-
HTMLでこんなこと可能ですか??
-
テキストファイルの開き方について
-
マイコンへのプログラム書き込...
-
COBOL サイン(符号)無しパッ...
-
Microsoftの異常?リネームが出...
-
重複文字削除の方法
-
テキストファイルをiCalendar形...
-
OE6を立ち上げて自動化したいの...
-
ZIPファイルダウンロードに...
-
クエリー出力からEXCELに吐き出...
-
パスワード設定のタグについて
-
ファイルを取得するC#のプロ...
-
CSVファイルの時刻の形式について
-
ファイル出力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
テキストファイル固定長データ...
-
VB(VBA)で、バイナリデータを使...
-
バイナリデータの中からMidのよ...
-
WORDのVBAで差し込み印刷時、デ...
-
Excel VBAが徐々に遅くなる
-
既存のテキストファイルを開く方法
-
C言語のソースからコメントを抜...
-
VBSでテキストファイルの2行目...
-
エクセルVBAでメールの自動作成...
-
wav ファイルから音声を数値デ...
-
ファイル変換
-
テキストファイル(英語&日本...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイルをSQLServerデ...
-
VBA。開いているテキストファイ...
-
テキストファイルの特定行の削...
-
VBscriptでWebサイトから取得し...
-
テキストファイルを読んで、Exc...
おすすめ情報