awk コマンドによる列の並び替えでCRLF改行コードの扱いについて


はじめまして。  
目的: 改行コードCRLFのcsv ファイルで列の並びを変更したい  
手段: awk コマンドによって指定  
例:

[code]

    $ cat sample.csv
    1,2,3
    4,5,6
    $ cat sample.csv | awk 'BEGIN{FS=",";OFS=","} {print $3,$2}' > out.csv
    3,2
    6,5
    
[/code]

このとき、列の順番は期待通りの結果なのですが、最終列に一緒についていると思われるCRコードが一緒に移動してしまいます。

[code]

    $ cat -e out.csv
    3^M,2$
    6^M,5$
    
[/code]

回避策は列変換処理を行う前に、改行コードをCRLF -> LF にした上で処理するという形になるのでしょうか？ (列変換後に取り込むツールが"sjis,
CRLF"のファイルのみという仕様なので変換がひと手間になってしまい避けたく・・・)




`RS`と`ORS`によって改行文字を変更することができます。

[code]

    $ cat sample.csv | awk 'BEGIN{RS="\r\n";ORS="\r\n";FS=",";OFS=","} {print $3,$2}' > out.csv
    $ cat -e out.csv
    3,2^M$
    6,5^M$
    
[/code]

以下は `man 1 awk` からの引用です。

> **ORS**  
>  出力レコードセパレータ。デフォルトは改行です。  
>  **RS**  
>  入力レコードセパレータ。デフォルトは改行です。




`RS`と`ORS`によって改行文字を変更することができます。

[code]

    $ cat sample.csv | awk 'BEGIN{RS="\r\n";ORS="\r\n";FS=",";OFS=","} {print $3,$2}' > out.csv
    $ cat -e out.csv
    3,2^M$
    6,5^M$
    
[/code]

以下は `man 1 awk` からの引用です。

> **ORS**  
>  出力レコードセパレータ。デフォルトは改行です。  
>  **RS**  
>  入力レコードセパレータ。デフォルトは改行です。

