• ベストアンサー

MacでCSV出力 Catで読み込むと0行

Microsoft Excel for Mac 2011を利用しています。 Mac OSは10.10です。 CSV出力をして、Kシェルで処理をしたいのですが、うまくCSVファイルを読み込めないようです。 cat hoge.csv |wc -l をしてみると 0行になっています。 改行関連がおかしいのか、どうかわからない状態で、前にすすめません。 手打ちテキストを作成したシェルに読み込ませるとうまくいくのですが。。 どなたかご教授お願いいたします。

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

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

まず、wcの結果から 0 2111 36081 UTF8_hoge.csv ということは 行数 0 単語数 2111 文字数 36061 です。wc -l は行数ですので、catからのパイプでの入力と、直接指定した場合とで一致しています。 ということは「Catで読み込むと」ではなく、もとから改行と見做されていない、ということです。 od -c の結果から、やはり、改行コードがCR (OS9以前のMac用)になっていることが原因のようです。 改行コードの変換には ・Mac OS X に付属のコマンドラインツールを使うなら、 tr , sed ,awk ,perl , python 等で変換スクリプトを書く ・nkf ,dos2unix等のツールをインストールして使う ・単純なので、変換ツールを自作する という方法があります。

bauzoux
質問者

お礼

丁寧に教えていただきましてありがとうございました。 ご説明いただき、理由がわかりました。 nkfを入れているので、nkfからしてたいと思います。 本当にありがとうございました。

その他の回答 (2)

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

> od -c hoge.csvを打ってみましたが、標準出力の意味がわかりませんでした。 man od でマニュアルを読みましょう。(ネット検索でもいいですけど) od はバイナリをダンプするコマンド -c オプションを付けると「文字」と解釈できるところは、そのまま文字で出力されます。 CSVならテキストファイルなので、ファイルの内容がほぼそのまま出力され、改行の代りに、CR は \r LF は \n と出力されます。 > 改行コードはKシェル内部でファイル読み込む際に変更できるでしょうか? 本当に改行コードが原因なら、変換する方法はあります。 あと、wcは直接ファイルを指定すると、そのファイルの計測をします。 wc hoge.csv ではどうなるのでしょう?

bauzoux
質問者

お礼

回答再度いただきましてありがとうございます。 >CSVならテキストファイルなので、ファイルの内容がほぼそのまま出力され、改行の代りに、CR は \r LF は \n と出力されます。 出力結果の内容をよくみたら、/r になっていました。 改行コードが/nでないみたいです。 手打ちで試しに作成したテキストファイルをみると改行コードは/nになっているみたいです。 >wc hoge.csv >ではどうなるのでしょう? 以下の結果になっています。 0 2111 36081 UTF8_hoge.csv

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

> cat hoge.csv |wc -l をしてみると 0行になっています。 まず、 od -c hoge.csv で、改行コードを確認してください。 上記から連想されるのは、「改行コードがCR」 OSXの前の OS9以前だと、Macの改行コードはCRであり、今でも、一部アプリケーションは「Mac用改行コード」を選択して保存すると、CRを使います OSXはUNIXであり、改行コードはLFです。 lsh等を使って処理するなら、 改行コードはLFをLFを使っていることが必要となるでしょう。

bauzoux
質問者

お礼

回答ありがとうございます。 od -c hoge.csvを打ってみましたが、標準出力の意味がわかりませんでした。 改行コードはKシェル内部でファイル読み込む際に変更できるでしょうか?

関連するQ&A

  • CSV出力で改行がうまくできない。

    VBAでテキストファイルにCSV出力をおこなっています。 方法は、 Print #FreeFile, FreeFileOutput; でおこなっています。FreeFileOutputは変数でカンマで区切られた複数の値が はいっています。最後はカンマはありません。つまり、 "a,b,c,d" といった値がFreeFileOutputにはいっています。 これをループでまわして、複数行を出力したいとおもっています。 無事に出力はできるのですが、テキストファイルを見ると各行の終わりで改行 されていません。print関数を使い";"をつけると自動で改行が入力される みたいですがされません。どうしてでしょうか?

  • mysqlのCSV出力について

    mysqlのCSV出力について意見下さい。 mysqlからコマンドで50000万行のURLをCSV出力させるとすぐに出力されますが、ブラウザからダウンロードすると10分近くかかります。ブラウザのダウンロードは遅いものでしょうか?最悪シェルをキックして起動しようとしてます。

    • ベストアンサー
    • MySQL
  • ○行目から□行目だけを表示するコマンド

    テキストファイルの中から、10行目から20行目のみを表示するようなコマンドがあれば教えてください。 CATやMOREのようなコマンドにオプションで行数を指定して指定した行数だけを見ることは可能でしょうか? もしコマンドで一発で無理なら、hoge.txtというファイルの10行目から20行目までを表示するような簡単なシェルの書き方を教えてください。 よろしくお願いします。

  • CSV出力のダブルクォーテーションについて

    ウェブアプリからCSV出力を行いたいのですが 出力行の両端に「"」(ダブルクォーテーション)が一緒に出力されます。 このダブルクォーテーションを出力したくありません。どうすればいいでしょうか?ご教授お願いします。 ちなみに下記は自分で作った例です。また使用するクラスはCSV::Writer以外でもかまいません。 class hoge  def exprt   cntnt_type = "text/csv"   ##ファイル名称の設定   file_name = "hoge.csv"   ##CSVオブジェクトを生成し、データをセットしていく   CSV::Writer.generate(output = "") do |csv|     csv << ["hoge", "fuga"]   end   ##CSVファイルの出力   send_data(output, :type => cntnt_type, :filename => file_name) end

  • Excel をCSVで出力できません。

    OS/Win7 Excel 2007  Excel表をCSV形式で出力したい。「ファイル名保存」「ファイルの種類―CSV」を指定すると、下記メッセージが出て、CSV形式で出力できません。 「(出力ファイル名.CSV)には互換性のない機能が含まれている可能性があります。」 単にテキストデータとしてなら出力できますが、このテキストファイルからOPEN文で読み込むと 1レコード全体を読み込めません。解決方法を教えてください。 同窓会の宛名書きを今週中にもしなければなりませんので、大変困っています。よろしくお願いします。

  • ファイル内の改行を削除し1行にするシェル

    お世話になっております。 ファイル(テキスト)内には、改行を含んだ複数の行が記述されています。 これを1行にして上書き保存するシェルを実行をするための シェルを作成したいと思っています。 ファイル内には以下のような値が改行を含んで入っています。 123 456 789 →これを、「123456789」と改行を取り除き、既存のファイルの上書き保存をしたい なお、改行を含んだ対象のファイルは、ファイル名にある文字を含む ファイルのみに対して行いたいのですが。 例:ファイル名に、「*abc*」、「*def*」、「*xyz*」を含むファイルが対象 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 cat 入力ファイル名 | tr -d '\n' > 変換後の出力ファイル名 ご教授いただきたく、よろしくお願いします。

  • CSVの出力(1行を3行に出力~)

    テキスト式1行 200705 00001 A01 A02 B01 B02 C01 C02があるとします。 200705と00001は3行の先頭を出したいので、どうやってループさせたらいいのかわからないのです。 今の状況 Private Sub Object(lFname As String, lOFilename As String) Dim IUO As Variant ''出力データ Dim lFBnt As Long ''開始位置1 Dim m_Input As String ''レコード退避先データ Dim byteInput() As Byte ''領域確保変数 Dim fs As Object ''ファイルシステムオブジェクト Dim ObjOutFile As Object ''出力先ファイルオブジェクト'' IUO = "" ''出力先ファイルオブジェクトの作成 Set fs = CreateObject("Scripting.FileSystemObject") ''出力先ファイル名の指定 Set ObjOutFile = fs.CreateTextFile(lOFilename, True) ReDim byteInput(レコードの長さ- 1) ''正常ファイル時のファイルオープン Open lFname For Binary As #1 '' ファイルの終端までループを繰り返します。 Do While Loc(1) < LOF(1) IUO= "" ''該当行のレコードデータの取得 Get #1, , byteInput m_Input = StrConv(byteInput, vbUnicode) lFBnt = 1 IUO = IUO + Chr(39) & MidMbcs(m_InputBuffer, lFBnt, 一つ目のパラメータ名) + Chr(39) lFBnt = lFBnt + 一つ目のパラメータ名 IUO = IUO + vbNewLine ''改行 ''ファイルへの書込 ObjOutFile.Write (IUO) Me.Refresh Loop Close #1 ''File close ObjOutFile.Close Set ObjOutFile = Nothing End Sub 以上では1行しか出力できないのですが、どうやったら3行出力できるのでしょうか。 よろしくおねがいします。

  • シェルで一行一行読み込む

    いつもお世話になっております。 標題の通り、シェルで一行一行読み込で出力する方法をご教授願えないでしょうか [sh] #!/bin/bash cat test.txt | while read line do echo $line done [test.txt] /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html /usr/hoge1/hoge1/hoge2/hoge3/hoge4/index.html /usr/hoge3/hoge1/hoge2/hoge3/hoge4/index.html 通常echo $lineにしていれば、text.txtの内容が出力されるのですが、 加えて、ls -l コマンドも実行したいのですが、うまくいきません [したいこと] /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html -rw-rw-r-- 1 hoge hoge 7536 3月 16 16:15 /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html /usr/hoge/hoge1/hoge2/hoge3/hoge4/index.html -rw-rw-r-- 1 hoge hoge 7536 3月 16 16:15 /usr/hoge1/hoge1/hoge2/hoge3/hoge4/index.html よろしくおねがいします

  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題は13,4件に1行改行されてしまいます。 この改行を省くことができるでしょうか? --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • [PHP]csvファイルを生成するときのマックの改行対応の方法について

    [PHP]csvファイルを生成するときのマックの改行対応の方法について 現在、phpでcsvファイルを出力しているのですが、Windowsだと旨く改行が反映されるのですが、Macだと旨く行きません。。。 改行は「\n」を使っていましたが、マックの改行コードが「\r」との事なので、「\n\r」としたのですが、旨く反映されないようです。。。 途中は省きますが $csvData .= "A列" . "," . "B列" . "\n\r"; $csvData .= "a" . "," . "b" . "\n\r"; $csvData .= "c" . "," . "d" . "\n\r"; として、マックでオープンオフィスを使用して開くと、 A列,B列a,bc,d と1行で出て来てしまします。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう