2

シェルで CSV ファイルを読み取る必要があります。CSV ファイルのセルに 1 行が含まれていても問題ありません。しかし、CSV ファイルのセルに複数の行がある場合、CSV ファイルを区切ることができません。

Filename            Lines
/etc/hosts          example.test.com
                    example2.test.com
/etc/resolv.conf    nameserver dns.test.com
                    search test.com

ユーザーからの入力を CSV ファイルで取得し、指定された行を上記のファイルに追加する必要があります。ここでは、CSV ファイルの各セルに複数の行があり、ファイルを cat しようとすると、異なる順序で表示されます。

[user2@mon ~]$ cat test2.csv
"Filename","Lines"
"/etc/hosts","example.test.com"
,"example2.test.com"
"/etc/resolv.conf","nameserver dns.test.com"
,"search test.com"

そのファイルから複数の行を読み取る方法はありますか?行数は常に同じではありません。

4

2 に答える 2

2

入力が例と同じくらい基本的であると仮定すると、次のようにするだけでうまくいく可能性があります。

sed 's/^,/ ,/' test2.csv | tr -d \" | column -s, -t
于 2012-10-08T14:57:45.690 に答える
2

これはあなたが求めているものかもしれません:

awk -F, '{ sub(/^"/, "", $1); sub(/"$/, "", $1);
           sub(/^"/, "", $2); sub(/"$/, "", $2);
           printf "%-20s  %s\n", $1, $2;
         }'

手動でのバッシングにより多くの時間を費やせば、代替操作を圧縮できる可能性があります。これはソリューションとして脆弱です (CSV 形式の処理に特化したコードを使用しないほとんどのソリューションは脆弱です)。引用符で囲まれたフィールドのいずれかにコンマが含まれていると、ひどく失敗します。

データに適用すると、次の結果が得られます。

Filename              Lines
/etc/hosts            example.test.com
                      example2.test.com
/etc/resolv.conf      nameserver dns.test.com
                      search test.com

CSV 形式のデータを確実に操作できるその他のツールには、次のものがあります。

これが探しているものでない場合は、質問を明確にしてください。

于 2012-10-08T14:18:12.980 に答える