2017-05-03 13 views
-3

フィールドに侵入するために必要な乱雑なテキストデータを定期的に操作する必要があります。awkにデータの改行を無視させるにはどうすればよいですか?

私はフィールドセパレータとしてバックスペース(10進数008)を使用し、型付きファイルには表示されないのでレコードセパレータとして削除(10進127)を使用しています。

私はすべての方法で分割するプログラムを手に入れることができますが、awkも使いたいです。それはRS=<delete>を受け入れますが、私は欲しくない改行のレコードも破ります。

明らかに、改行をある種のシーケンスで置き換えて元に戻すことはできますが、これを行うにはより滑らかな方法がありますか?

+4

入力例と希望の結果を追加してください。推測するにはあまりにも多くの作業。 – dawg

+0

あなたが理解していない質問には答えないでください。私は手書き入力データファイルには表示されないので、区切り文字としてバックスペースと削除文字を使用しています。簡単なテストについては、以下を試してみてください。 猫>テスト B C D 電子グラム F 時間私は これは、3つのフィールドそれぞれに3つのレコードを作成 - 最後のフィールドを改行を含むべきです。しかし、試してみると、awk '{FS = "\ 010"} {RS = "\ 177"} {OFS = ""} {ORS = "\ n"} {print NR " - " NF " $ 0} 'test 私はそれがあなたが見るものではないことを保証します。 –

+0

@ jas、ほとんどの通常の文字に設定されていると、awkは改行で改行しません。しかし、これは正常ではありません。観察していることが起こっていないことを人々に伝える前に、行動のテストや研究をすることをお勧めします。 –

答えて

1

私は、あなたが必要に応じてRSとFSを設定すると期待どおりに動作すると思います。

考える:

$ echo -n $'a\bb\bc\177c\bd' | od -c 
0000000 a \b b \b c 177 c \b d        
0000011 

あなたはgawkをこのように使用することができます。

$ echo -n $'a\bb\bc\177c\bd' | awk -v FS=$'\b' -v RS=$'\177' '{ print NR, NF, $1, $2, $3}' 
1 3 a b c 
2 2 c d 

明らか\bが正しく表示されないように$0の印刷が、レコード数、フィールドカウントを引き起こす、と個々のフィールドは期待通りです。

$'[string or character]'のBashismは、awake変数の単一文字RSFSを作成するためのテスト文字列を設定することに注意してください。

+0

ありがとう - これは私が必要としていたものです。 bashismは、私が欠けていたものでした。 バックスペース、削除、矢印などを含むファイルをキャッチアウトするのは奇妙ですが、私が知っている文字を使用できることは、ファイルをスキャンする必要がなく –

関連する問題