重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

正確にはOS X 10.9.5のbashですが、UNIX一般の質問と思われるのでこのようなタイトルにしました。
catコマンドで、あるテキストファイルのあとに、同じテキストファイルをつくろうと思いましたが、無限ループになってしまい、巨大ファイルができてしまいます。

最初、このようにしてa.txtという1行のファイルを作りました。

 [~]$ cat > a.txt
 aaa

それで、同じa.txtを

 aaa
 aaa

という2行のファイルにしたいと思い、以下のようなコマンドを入力しました。

[~]$ cat a.txt >> a.txt

自分の目論見としては、a.txtの内容がa.txtに追加されるので、2行になるかと思いましたが、応答がなくなりました。
Ctrl+Cで停止し、a.txtの内容を見ると

[~]$ cat a.txt
aaa
aaa
aaa
aaa
aaa
aaa
・・・・・・

と何千行も入っています。
ファイルのサイズはこれぐらいでした。

[~]$ ls -al a.txt
-rw-r--r-- 1 TYWalker staff 16898724 9 22 12:57 a.txt

これは、なぜこのような現象になるのでしょうか。
また、私が本来やろうとしたことを、簡単なコマンドで行うにはどうすればいいでしょうか。
よろしくお願いします。

A 回答 (3件)

cat a.txt >> a.txt とすると、


まず現在のa.txtの内容を読み出し、a.txtに追記されます。
すると、
aaa\n (←次はここから読み込まれる)(catにより、追加されている→) aaa\n
となります。ファイルには続きがあるので、それが読み込まれてa.txtに追記されます
aaa\naaa\n (←次はここから読み込まれる)(上の続きで追加されている→) aaa\n
まだファイルの続きがあるので読み込まれて追記されます.以下同様

これが延々と続く理由です。


出力を別のファイルにするとか
cat a.txt a.txt > b.txt
別のファイルにコピーしてから追記するとか
cp a.txt c.txt
cat c.txt >> a.txt
    • good
    • 0
この回答へのお礼

ありがとうございます!
納得いきました!

お礼日時:2014/09/28 08:01

sed 2q a.txt >> a.txt


でできちゃったりして.
    • good
    • 0
この回答へのお礼

sedですか。これもかっこいいですね!
ありがとうございます!

お礼日時:2014/09/28 08:01

ぱっと思いつくものは標準出力経由での書き込み



cat a.txt | tee -a a.txt
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2014/09/28 08:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!