.txt
フォーマットを壊さずにタブ区切りのファイルをCSVファイルに変更するには?
タイプをからにのみ変更しましたが、.txt
タブ.csv
で区切られたすべてのデータは同じExcelセルに配置されます。
だから私がここで尋ねているのは次のとおりです。
- 複数のファイルのタブ文字をコンマに変更するには?
.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::CSV
CSV形式が必要な場合を参照)必要なものがタブをコンマに変換するだけであれば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