GNU/Linux >> Linux の 問題 >  >> Linux

カンマ区切りファイルでのみ引用符間のカンマを削除しますか?

カンマ(,)で区切られた入力ファイルがあります )。二重引用符で囲まれたフィールドの中には、コンマが含まれているものがあります。これがサンプル行です

123,"ABC, DEV 23",345,534.202,NAME

二重引用符と二重引用符の内側にあるすべてのカンマも削除する必要があります。したがって、上記の行は、以下に示すように解析される必要があります

123,ABC DEV 23,345,534.202,NAME

sedを使用して次のことを試しました しかし、期待した結果は得られません。

sed -e 's/(".*),(".*)/1 2/g'

sedを使った簡単なトリック 、awk または他のUNIXユーティリティをお願いしますか?

承認された回答:

引用符のバランスが取れている場合は、他のすべての引用符の間のコンマを削除する必要があります。これは、awkで表すことができます。 このように:

awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile

出力:

123,ABC DEV 23,345,534.202,NAME

説明

-F" awkが二重引用符で行を区切るようにします。これは、他のすべてのフィールドが引用符間のテキストになることを意味します。 forループはgsubを実行します 、グローバル置換の略で、他のすべてのフィールドで、コンマ("," )何もなし("" )。 1 最後に、デフォルトのコードブロックを呼び出します:{ print $0 }


Linux
  1. 「du-sh*」と「du-sh./*」の違いは?

  2. .exrcと.vimrcの違いは?

  3. CLI から、ファイルの最後の行を出力します。

  1. ファイル名のみを出力する diff

  2. grep、awk、sed の違いは何ですか?

  3. inode 番号を使用して Linux でファイルを削除する

  1. フォルダから最も古いファイルを削除するためのBashスクリプト?

  2. csv の二重引用符を削除する方法

  3. 巨大なログ ファイル (>14 GB) で最後の x GB のみを grep しますか?