ギリギリ行けるお一人様のライン

こんにちは。

UNIXユーザーです。

awkでテキストファイルから行、列を指定して、文字列を抜き出し、それをシェルで変数として定義したいのですが、各行の最終列(最も右の列です)を指定すると、抜き出した文字列の末尾に’^M’がついてしまいます。
これが改行を意味するということは分かったのですが、これを取り除くためにはどうしたらよいでしょうか??

どなた様かご教授ください。
よろしくお願いいたします。

A 回答 (4件)

改行文字、というか CR(ASCIIコード0x0d)ですね。


元のテキストファイルはWindowsで作成したものじゃないですか?
Windowsではテキストの改行にCR+LF(0x0d 0x0a)の2バイトを使い、UnixではLF(0x0a)の1バイトを使っています。
なんの工夫もせずにWindows→Unixへファイルを転送すると、LFは改行となりますが、CRはそのまま「文字」として残ってしまします。awkでは1行単位でLFを除いた状態で処理するので、CRが残ってしまっている、ということです。

awkで取り除く方法は既出なので、別の手段としては
・Windows上でLFで保存する: そのテキストファイルを作成するソフトによっては可能です。
・Unixへ転送時にテキストモードを使用する: ftpでは、これでCRが取り除かれます。バイナリーファイルでやってしまうと、ファイルが破壊されますので、バイナリーファイルはバイナリーモードで。
・Unix上のツールでCRを取り除く: (インストールされているなら) dos2unixやnkfといったコマンドで改行コードの変換ができます。 そのままパイプでawkに繋いでもいいです
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます.
UNIX上でテキストファイルを見ると文字化けしているところがあったのはそういう理由だったのですね.
変換したところうまくいきました.
ありがとうございます.

お礼日時:2010/11/24 15:21

複数行にわたるデータでないなら組み込み変数 RSの内容を \r\n にするとか。



awk -vRS='\r\n' 'スクリプト' ファイル…

BEGIN節でやってもいいですけど。
    • good
    • 0
この回答へのお礼

ありがとうございます.
残念ながら複数行にわたるデータなのです…
BEGIN節というのも存じ上げないので,調べてみますね.

お礼日時:2010/11/24 15:22

やりたい人がいるとは思えませんが, エディタでもできますな. vi でも emacs でも可.

    • good
    • 0
この回答へのお礼

ありがとうございます.
処理しなくてはならないファイルが大量にあるので,その方法は最後に取っておきたいところです.

お礼日時:2010/11/24 15:24

gawk '{print sub("\r","",$NF)}'

    • good
    • 0
この回答へのお礼

ありがとうございます.
確かに^Mは消せるのですが,うまく値を読み取れなくなってしまいました…

お礼日時:2010/11/24 15:14

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報