none
fc コマンドについて教えていただけますか RRS feed

  • 質問

  • はじめまして。
    fcコマンドでのファイル比較について教えて頂ければ、助かります。

    以下のファイルを比較すると、上手く差分の結果が出ませんでした。

    ----------------------------
    〇1.txt ファイル
    a

    333333333
    333333333
    333333333

    2222222222
    =======================
    4444444444
    5555555555
    6666666666

    2222222222

    〇2.txt ファイル
    a
    =======================
    4444444444
    5555555555
    6666666666

    2222222222

    ----------------------------

    〇1.txtと2.txt2の結果は以下となりました。

    ファイル 1.txt と 2.TXT を比較しています
    ***** 1.txt
        1:  a
        2:  
        3:  333333333
        4:  333333333
        5:  333333333
        6:  
    ***** 2.TXT
        1:  a
        2:  =======================
        3:  4444444444
        4:  5555555555
        5:  6666666666
        6:  
    *****

    ***** 1.txt
        8:  =======================
        9:  4444444444
       10:  5555555555
       11:  6666666666
       12:  
       13:  2222222222
    ***** 2.TXT
    *****

    ----------------------------

    期待している結果は以下です。

    ファイル 1.txt と 2.TXT を比較しています
    ***** 1.txt
        1:  a
        2:  
        3:  333333333
        4:  333333333
        5:  333333333
        6:  
    ***** 2.TXT
        1:  a
        2:  =======================
    *****

    1.txtの1行目から6行目、2.TXTの1行目から2行目を比較したかったのですが、
    fc コマンドの結果は1.txtの1行目から6行目、2.TXTの1行目から2行目が比較されました。

    ただし、
    1.TXTの6行目の改行を取ると、
    期待した結果が得られました。

    何故このような事象が起こるのか、教えて頂けますでしょうか?

    お手数をお掛けいたします。
    よろしくお願いいたします。
    • 移動 星 睦美 2014年10月29日 5:17 MSDN >Windows クライアント開発 - 全般 から
    2014年10月29日 3:13

回答

  • フォーラム オペレーターの星 睦美です。
    コマンドについて さん、MSDN フォーラムに投稿ありがとうございます。

    fcコマンドを使ったテキストファイルの比較に関しては、開発者向けのMSDN フォーラムよりもITPro 向けのTechNet フォーラムで詳しい方がいるかも知れませんね。TechNet フォーラムでの過去のスレッドがありますので参考までにご紹介します。

    TechNet フォーラム>Windows Server 2008 全般>fcコマンドについて:

    今回の質問をTechNet フォーラムに移動して、ユーザーからの回答を受けることもできます。
    その場合にはコマンドについて さんが、fc コマンドを実行しているOS環境をこちらのスレッドに返信してお知らせください。
    例えばWindows Server 2008 R2 環境の場合には、オペレーターのほうでTechNet のWindows Server 2008 全般 のフォーラム に移動させていただきます。

    ※フォーラム ユーザーから参考になる回答がありましたら、投稿者からの[回答としてマーク]をお願いします。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2014年10月29日 4:25
  • 正確なロジックはわかりませんが、動きから察するとこのようなロジックではないかと思います。

    [1.txt]                         [2.txt]
     1: a                           a
     2:                             =======================
     3: 333333333                   4444444444
     4: 333333333                   5555555555
     5: 333333333                   6666666666
     6:                             
     7: 2222222222                  2222222222
     8: =======================     
     9: 4444444444                  ----------------------------
    10: 5555555555                  
    11: 6666666666
    12: 
    13: 2222222222

    [1.txt] の 2行目と [2.txt] の2行目が違うので、
    同じ個所まで行を進めて6行目でヒットしたので1行目から6行目までをひとつのかたまりとして扱う。
    結果、2行目から5行目までが違うと結果を表示している。

    ***** 1.txt
        1:  a
        2:
        3:  333333333
        4:  333333333
        5:  333333333
        6:
    ***** 2.TXT
        1:  a
        2:  dddd
        3:  4444444444
        4:  5555555555
        5:  6666666666
        6:
    *****

    1.txt の6行目の改行をなくした場合は、

    [1.txt]                         [2.txt]
     1: a                           a
     2:                             =======================
     3: 333333333                   4444444444
     4: 333333333                   5555555555
     5: 333333333                   6666666666
     6: 2222222222                                          
     7: =======================     2222222222
     8: 4444444444                  
     9: 5555555555                  ----------------------------
    10: 6666666666    
    11: 
    12: 2222222222              

    [1.txt] の 2行目と [2.txt] の2行目が違うが、
    それ以降、同じ行数で同じ値はない。

    したがって、[2.txt]の2行目 ======================= で比較。
    1.txt の7行目にあったので、1行目から7行目までと2.txtの1行目から2行目までを表示。

    2014年10月29日 6:45
  • チャブーンです。

    fcコマンドの比較ロジックについては、Windows XPですがオンラインヘルプに書いてありました。

    https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fc.mspx?mfr=true

    ----
    Reporting differences between files for an ASCII comparison
    When you use fc for an ASCII comparison, fc displays differences between two files in the following order:

    • Name of the first file
    • Lines from filename1 that differ between the files
    • First line to match in both files
    • Name of the second file
    • Lines from filename2 that differ
    • First line to match

    ----

    うえの記述からhysh_00さんの解説が正しい、と思います。まさか実装が載っているとは思いませんでしたので、私個人も勉強になりました。ありがとうございます。

    2014年10月29日 9:13
    モデレータ

すべての返信

  • フォーラム オペレーターの星 睦美です。
    コマンドについて さん、MSDN フォーラムに投稿ありがとうございます。

    fcコマンドを使ったテキストファイルの比較に関しては、開発者向けのMSDN フォーラムよりもITPro 向けのTechNet フォーラムで詳しい方がいるかも知れませんね。TechNet フォーラムでの過去のスレッドがありますので参考までにご紹介します。

    TechNet フォーラム>Windows Server 2008 全般>fcコマンドについて:

    今回の質問をTechNet フォーラムに移動して、ユーザーからの回答を受けることもできます。
    その場合にはコマンドについて さんが、fc コマンドを実行しているOS環境をこちらのスレッドに返信してお知らせください。
    例えばWindows Server 2008 R2 環境の場合には、オペレーターのほうでTechNet のWindows Server 2008 全般 のフォーラム に移動させていただきます。

    ※フォーラム ユーザーから参考になる回答がありましたら、投稿者からの[回答としてマーク]をお願いします。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2014年10月29日 4:25
  • 星 睦美様

    ご返信をありがとうございます。

    また、ご説明をありがとうございます。

    TechNet フォーラムの方へ移動していただけますと助かります。

    OS環境は、Windows7とWindows Server 2008 です。

    何卒、よろしくお願いいたします。 

    2014年10月29日 5:14
  • 星 睦美様

    移動をありがとうございます。

    >皆様

    fcコマンドについて、教えて頂けますと助かります。

    よろしくお願いいたします。

    2014年10月29日 6:07
  • 正確なロジックはわかりませんが、動きから察するとこのようなロジックではないかと思います。

    [1.txt]                         [2.txt]
     1: a                           a
     2:                             =======================
     3: 333333333                   4444444444
     4: 333333333                   5555555555
     5: 333333333                   6666666666
     6:                             
     7: 2222222222                  2222222222
     8: =======================     
     9: 4444444444                  ----------------------------
    10: 5555555555                  
    11: 6666666666
    12: 
    13: 2222222222

    [1.txt] の 2行目と [2.txt] の2行目が違うので、
    同じ個所まで行を進めて6行目でヒットしたので1行目から6行目までをひとつのかたまりとして扱う。
    結果、2行目から5行目までが違うと結果を表示している。

    ***** 1.txt
        1:  a
        2:
        3:  333333333
        4:  333333333
        5:  333333333
        6:
    ***** 2.TXT
        1:  a
        2:  dddd
        3:  4444444444
        4:  5555555555
        5:  6666666666
        6:
    *****

    1.txt の6行目の改行をなくした場合は、

    [1.txt]                         [2.txt]
     1: a                           a
     2:                             =======================
     3: 333333333                   4444444444
     4: 333333333                   5555555555
     5: 333333333                   6666666666
     6: 2222222222                                          
     7: =======================     2222222222
     8: 4444444444                  
     9: 5555555555                  ----------------------------
    10: 6666666666    
    11: 
    12: 2222222222              

    [1.txt] の 2行目と [2.txt] の2行目が違うが、
    それ以降、同じ行数で同じ値はない。

    したがって、[2.txt]の2行目 ======================= で比較。
    1.txt の7行目にあったので、1行目から7行目までと2.txtの1行目から2行目までを表示。

    2014年10月29日 6:45
  • チャブーンです。

    fcコマンドの比較ロジックについては、Windows XPですがオンラインヘルプに書いてありました。

    https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fc.mspx?mfr=true

    ----
    Reporting differences between files for an ASCII comparison
    When you use fc for an ASCII comparison, fc displays differences between two files in the following order:

    • Name of the first file
    • Lines from filename1 that differ between the files
    • First line to match in both files
    • Name of the second file
    • Lines from filename2 that differ
    • First line to match

    ----

    うえの記述からhysh_00さんの解説が正しい、と思います。まさか実装が載っているとは思いませんでしたので、私個人も勉強になりました。ありがとうございます。

    2014年10月29日 9:13
    モデレータ
  • >hysh_00様

    ご返信、ご説明をありがとうございます!

    よく分かりました。

    私もご説明のロジックと思います。

    助かりました。

    >チャブーン様

    ご返信、ヘルプをありがとうございます!

    webに載っていたんですね。

    ご意見ありがとうございます。


    お陰様で解決しました。

    ありがとうございました。

    ※はじめてなもので回答としてマークの付け方おかしくてすみません。

    2014年10月29日 9:31