複数のファイルをタブ区切りのCSVからカンマ区切りのCSVに変換する

複数のファイルをタブ区切りのCSVからカンマ区切りのCSVに変換する

.txtフォーマットを壊さずにタブ区切りのファイルをCSVファイルに変更するには?

タイプをからにのみ変更しましたが、.txtタブ.csvで区切られたすべてのデータは同じExcelセルに配置されます。

だから私がここで尋ねているのは次のとおりです。

  1. 複数のファイルのタブ文字をコンマに変更するには?
  2. .txtそれでは、ファイルをからにどのように変更しますか.csv

答え1

次のことができます。

perl -MText::CSV -F'\t' -i.orig -lape '
  BEGIN{$c = Text::CSV->new({binary=>1, eol=>""})}
  $_ = $c->string if $c->combine(@F)' ./*.txt

に変換する適切CSV(perldoc Text::CSVCSV形式が必要な場合を参照)必要なものがタブをコンマに変換するだけであればtr '\t' , < file.txt > file.csv

答え2

使用csvkit:

入力ファイルが次のようになるとします。

a       10,000  e       u
a       o       e       u
a       o       "hello  world"  u
a       o       e       u

helloここでは、すべてのフィールドはタブで区切られ、間にはタブ文字もありますworld(引用符で示されているように、2つの単語が同じフィールドに属しています)。

$ csvformat -t file.txt
a,"10,000",e,u
a,o,e,u
a,o,hello       world,u
a,o,e,u

このオプションは、入力がタブで区切られていることをユーティリティに-t通知します。csvformat

正しく引用され、10,000周囲の引用はhello<tab>world明示的なので削除されました。

すべてのフィールドを引用するように強制します。

$ csvformat -t -U 1 file.txt
"a","10,000","e","u"
"a","o","e","u"
"a","o","hello  world","u"
"a","o","e","u"

入力が次のような別の引用符文字を使用する場合

$ cat file.txt
a       10,000  e       u
a       o       e       u
a       o       'quote: "hello  world"' u
a       o       e       u

次に、次のようにします。

$ csvformat -t -q "'" file.txt
a,"10,000",e,u
a,o,e,u
a,o,"quote: ""hello     world""",u
a,o,e,u

入力データに一重引用符を使用することを指定します-q "'"


.txt複数のファイルに対してこのコマンドを実行するには、処理する場合は、タブで区切られた各ファイルをCSVに変換します。現在の目次:

for name in ./*.txt; do
    csvformat -t "$name" >"${name%.txt}.csv"
done

このビットはファイル名から拡張子を削除し、${name%.txt}.csv拡張子を追加します。これは次のように書くこともできます。.txt.csv

for name in ./*.txt; do
    csvformat -t "$name" >"./$( basename "$name" .txt ).csv"
done

これにより、変更されていない元のファイルセット.txtとその.csvファイルが作成されます。

答え3

次のコマンドを試すことができます

sed 's/\t/,/g' yourtab.txt > updatefile.csv

関連情報