sedを使用して複数の列に二重引用符を追加できますか?

sedを使用して複数の列に二重引用符を追加できますか?

私はコース修了をしており、60万行の.csvファイルの一部の列を操作する必要があります。私はsedとawkに関するいくつかのフォーラムを検索しましたが、似たようなものが見つかりませんでした(残念ながら、Linuxに関する私の知識はそれほど深くありません)。私は通常、1つの列またはすべての列でのみ機能することがわかりました。必要なのは、最初、5番目、6番目の列にのみ二重引用符を追加することです。

たとえば、

2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123

~になる

"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","123"

たぶんデータマイニングを始めたばかりで、数週間後に設定がどのように見えるかわからないので、いくつかの列を変更することができます。したがって、短い論理構文を作成できる場合は永遠になります。ありがとう。

ベストアンサー1

使用csvtool便利なformatコマンドがあります:

csvtool format '"%1",%2,%3,%4,"%5","%6"\n' file.csv 

例:

echo "2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123" |
csvtool format '"%1",%2,%3,%4,"%5","%6"\n' -

出力:

"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","123"

csvtoolcallシェル関数と外部プログラムを使用して行を解析することもできます。.CSV文書。を使って同じことをprintfしますが、123"16進形式で実行:

echo "2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123" | 
csvtool call "printf '\"%s\",%s,%s,%s,\"%s\",\"%x\"\n'" -

出力:

"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","7b"

おすすめ記事