• ベストアンサー

UNIXで800行毎に改行をいれる方法ありますか?

1行が10万バイトぐらいあるので、800行毎に 改行コードを入れたいのですが、UNIXで簡単に 実現する方法ありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • madman
  • ベストアンサー率24% (612/2465)
回答No.4

すみません、プログラム間違えました。こちらです。 #include <stdio.h> int main() { FILE *f1,*f2; int i=0; char c; f1 = fopen("afile.txt", "r"); f2 = fopen("bfile.txt", "w"); if (f1 && f2) { while(!feof(f1)) { fscanf(f1, "%c", &c); fprintf(f2, "%c", c); i ++; if (i == 800){ i=0; fprintf(f2, "\n"); } } fclose(f2); fclose(f1); } }

matchori
質問者

お礼

ありがとうございます。 残念ながらccもgccも入っていなく、Javaかシェルしか入ってなかったのですが、 他のマシンでは、10万件を2秒くらいで処理してくれ 動作しました。 gccなどを入れてもらえるか検討してみます。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • madman
  • ベストアンサー率24% (612/2465)
回答No.3

a.cというファイルに下記のプログラムを入力して保存してください。 /*----ここから---*/ #include <stdio.h> main() { FILE *f1,*f2; int i=0; char c; f1 = fopen("./adile.txt", "r"); f2 = fopen("./bdile.txt", "w"); if (f1 && f2) { while(feof(f1)) { fscanf(f1, "%c", &c); fprintf(f2, "%c", c); i ++; if (i == 800){ i=0; fprintf(fp2, "\n"); } } } } /*----ここまで---*/ で、コマンドラインにて cc a.c を実行してください。 a.outという実行モジュールができますので 元のファイルをafile.txtとして同じディレクトリに保存し、a.outを実行してください。 a.outに引数はいりません。 出力結果はbfile.txtと出力されるはずです。 コンパイラが無い場合はgccをインストールするか、この方法はあきらめてください。 尚、2バイト文字は無視します。

すると、全ての回答が全文表示されます。
  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

800行毎じゃなくて、800バイト毎に改行ですよね。 foldコマンドでどうでしょう。 fold -800 filename > output だったと思います。 しかし、全角文字が入っていると、ちょっとまずいかも

matchori
質問者

お礼

はい。800バイト毎です。すみません。 試しましたが全角は入っているので駄目なようです。

すると、全ての回答が全文表示されます。
  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

こんな感じでは、用件に合いませんか? awk '{print $0; if( FNR%800==0 ){print "\n";}}' < afile.txt > bfile.txt

matchori
質問者

お礼

ありがとうございます。惜しかったです。 # awk '{print $0; if( FNR%800==0 ){print "\n";}}' < afile.txt > bfile.txt awk: レコード `%03-3541-3411トウキヨウトチ...' が長すぎます。 レコード番号 4

すると、全ての回答が全文表示されます。

関連するQ&A