よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

コマンドでtxtファイルの結合実験 type/cat

目次

目的・目標

WindowsコマンドプロンプトWindows上で動くGitBashの使って、txtファイルの結合をコマンドtypeとcatで行った時の結果の違いのメモです。

条件・手順

  • フォルダに「1.txt」「2.txt」を入れています。
  • フォルダ内のtxtファイルを一括で読み、新規ファイル「all.txt」に書き出します。
  • 「all.txt」は「1.txt」「2.txt」と同じフォルダ内に書き出します。


以下の作業を連続して行います。

  1. フォルダの中身を調べる
  2. 「1.txt」を読む
  3. 「2.txt」を読む
  4. 一括でtxtファイル全てを読んだ結果を「all.txt」として書き出す。
  5. フォルダの中身を調べる
  6. 出来た「all.txt」を読む

実験

順番を入れ替えますが、先にBashから

GitBashからcatを使って

$ ls
1.txt  2.txt
$ cat 1.txt
def f1():
        print("1")
$ cat 2.txt
def f2():
        print("2")
$ cat *.txt > all.txt
$ ls
1.txt  2.txt  all.txt
$ cat all.txt
def f1():
        print("1")
def f2():
        print("2")

コマンドプロンプトからtypeを使って

>dir
ドライブ C のボリューム ラベルは Windows です
(※途中省略します)
 1.txt
 2.txt
(※途中省略します)                  
>type 1.txt
def f1():
        print("1")
>type 2.txt
def f2():
        print("2")
>type *.txt > all.txt
(※途中の余白を省略します)
1.txt
2.txt
all.txt
>dir
ドライブ C のボリューム ラベルは Windows です
(※途中省略します)
1.txt
 2.txt
all.txt
(※途中省略します)
>type all.txt
def f1():
        print("1")
def f2():
        print("2")
def f1():
        print("1")
def f2():
        print("2")

結果・備考

一括でファイルを読ませた結果を同じフォルダに新規ファイルとしてして書き出す時、

の違いが、それぞれの最後で「all.txt」を読んだ結果でわかりました。



コマンドプロンプトの方は、フォルダ内新規ファイル「all.txt」がダブって書き出している。

たぶんこんな感じで処理してる?

空の「all.txt」作成
→「1.txt」を読む
→「all.txt」に書く
→「2.txt」を読む
→「all.txt」に追記する
→「all.txt」を読む
→「all.txt」に追記する
という手順かどうかは分からないが、内容がダブっている理由はそのへんか。


一方Bashの方は、
「1.txt」「2.txt」をコピー
→「all.txt」に書き出す
のような感じか。ダブっていない。

コマンドプロンプトで行う場合ダブりを避けるためには、

copy *.txt all.txt

と、copyコマンドで一括コピーしたものを「all.txt」として保存する方法なら、同一フォルダ内に新規で作成可能。