• 締切済み

0

0 10 0 13 ・ ・ ・ という数字が1万行近く続くテキストファイルがあるのですが、実際使用するデータが偶数行の数字のみなので、奇数行を消してしまいたいのですが、膨大な量なので手作業では非常に時間がかかります。 ですので、奇数行だけを消すC言語のプログラムを作りたいのですが、どのような構造にすれば良いのかご教授お願いします。 またそれ以外の簡単な方法があるのでしたら、そちらの方法をおねがいします。 OSはLinuxを使っています。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

Linuxを使っているのなら、GNU sedが入っているはずなので sed -n '2~2p' < 入力ファイル > 出力ファイル # man sed に「奇数行だけ表示」の例が載っています。そこから偶数行用に変更しました。 sedがGNU sedでないのなら、 awk を使って awk '(NR % 2 == 0) {print;}' < 入力ファイル > 出力ファイル またはperlで perl -ne 'print if ($. % 2 == 0 );' < 入力ファイル > 出力ファイル こんな作業にわざわざCでプログラム作るのは、時間と手間とディスク領域がもったいないです。

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.2

>どのような構造にすれば良いのか 全部読んで偶数行だけ出力します。 案1: while( fgets(buf, sizeof buf, stdin) && fgets(buf, sizeof buf, stdin) ){ fputs(buf, stdout); } 案2: int n=0; while( fgets(buf, sizeof buf, stdin) ){ n++; if( n % 2 == 0 ){ fputs(buf, stdout); } } 案1は手抜きなので、入力ファイルが奇数行だと期待通りの動作にはなりませんが。そこまで対応すると「案1改」のようなものを作らないといけません。ま、普通は案2ですね。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

シェルスクリプトでいいんじゃないかなーとか。 #!/bin/sh FILE = ${1} while read LINE do if [ $FLG = "TRUE" ]; then echo $LINE FLG = "FALSE" else FLG = "TRUE" fi done #動作テストはしてません。

参考URL:
http://matsui.homeunix.com/index.php?Bash%A5%B7%A5%A7%A5%EB%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%2F%C0%A9%B8%E6%CA%B8

関連するQ&A

  • エクセルデータをテキストに移す方法

    エクセルのデータをテキストに移す方法を教えてください。 例えばエクセルの1行目~100行目までデータがあるとして、その100個のデータを100個のテキストファイルにそれぞれ入れてくれるソフトがあれば教えていただきたいです。 1行のデータを1つのテキストファイルに移すという作業です。 コピペすれば済む話ですが数が膨大なので、時間がかかりすぎます。 よろしくお願いします。

  • C言語初心者過ぎてわからないです

    エクセルのCSVデータなんですが 1行目のデータを 1行目から5行目まで同じデータ 6行目のデータを 6行目から10行目まで同じデータ 10行目のデータを 10行目から15行目まで同じデータ 以上のような作業を繰り返し元のCSVのデータをすべて5行(つまりデータの量は5倍)にしたいのですが C言語でこのような作業を行うファイルをつくるにはC言語ではどのようなプログラムになるでしょうか

  • C言語の関数について困っています

    こんにちは。 C言語で、テキストファイルの行数を数える関数があれば教えて頂けないでしょうか。例えば、以下の3行を含んでいるテキストファイルを対象としたとすれば 123465789123456789 1234567981234579 987654321987654321 関数を実行すれば、3という数字が得られ、 123456  789 123546879  123 123  456789123   123456789123 というテキストファイルであれば、4という数字が得られる。そんな関数をご存知な方は私にご教授願えないでしょうか。どうぞよろしくお願いします。

  • iWork09、Numbersの質問です。

    iWork09、Numbersの質問です。 1 5 9 2 6 10 3 7 11 4 8 12 という容量で縦に複数行に股がって各項目がプロットされたテキストデータがあるのですが、 これを各項目それぞれを別々のセルにコピーペーストするにはどう操作をすればよいのでしょうか? データ量が膨大な量なので手作業をする訳にも行きません。 どなたか教えて下さい

    • ベストアンサー
    • Mac
  • 教えてください。

    手入力された数字(数字の条件:1以上15以下で奇数のみ)でダイヤモンド方を表示するプログラム。 (例)手入力した数字が5の場合   *  *** ***** ←ここが5になるようにする。  ***   * うまくプログラムを組むことが出来ません。言語はカテゴリーにも記載しているC言語です。わかる方教えて下さい。 よろしくお願い致します。

  • ファイルからのデータ読み込み方法について

    はじめまして、数ヶ月前からC言語を始めたものです。 ファイルからのデータ読み込みについて質問です。 テキストファイルとして以下のようなものがあります。 ************************* 23 3346 45 423 34 23 345 45 56 6345 ・・・ ・・・ ************************* このようなファイルから読み込みを行って、スペース毎の数字(整数型)を構造体の中の変数に順次格納していくようなプログラムを作りたいとおもうのですがどのように行ったらいいのでしょうか? 現在、fgets()で行ごとの文字列を読み込んでから、型変換を行おうと心みているのですが、うまくいきません。 回答よろしくお願いします。

  • C言語のテキストファイルの読込み

    必要に迫られてC言語でテキストファイルの読込みを行う プログラムを作成しなければならなくなりました。 whileとfscanfを用いて書式を指定して一行ずつ読込むことができる ということは知っていますが、その際、たとえば読み込むファイルが 20行のテキストファイルだったとして、10行目から読込みを 行いたい場合はどのようにプログラムを書けばいいのでしょうか? なにぶんC言語初心者ですのでよろしくお願いします。

  • C言語での、テキストファイル読み込みについて

    30行×30列の数字が記載されてテキストファイルがあり、 それをC言語で例えばA[ ][ ]といった配列に読み込みたいのですが、 どうすればよいでしょうか? fscanf関数を用いればできないことはないと思うのですが、 30個も書かなければならないのは冗長なので・・・。 なにかよい方法はありますでしょうか?

  • エクセル上の8桁の数字を一括して日付に変換する方法を教えて下さい。

    エクセル上の8桁の数字を一括して日付に変換する方法を教えて下さい。 ダウンロードしたエクセルデータのA列に日付として8桁の数字が入っているのですが、文字列として認識してるようで日付に変換出来ません。 例えば2010年1月1日の欄には20100101と入っていて、2001/01/01と変換したいのですがどうすればいいでしょうか。 セルの書式設定→表示形式→ユーザー定義で試してみましたが上手くいきませんでした。 データの量が何千行もあって膨大なので、1行ずつスラッシュを入れていくという作業は出来ません。 8桁の数字を一括して日付に変換出来る方法はあるのでしょうか。 教えて下さい。 宜しくお願い致します。

  • C言語のプログラムについて質問です。

    C言語初心者で困っています。 テキストデータの上から3行分を飛ばして、4行目から読み込むようにするにはどのようなプログラムを書けば良いでしょうか? ちなみにデータは2列、100003行あります。 よろしくお願いします。

専門家に質問してみよう