2016-12-26 14 views
0

私はlooks like thisというテキストファイルを持っています。私は,(既に存在し、行終端文字の場合は\r\n)で標準形式に変換しようとしています。問題は、現在のファイルは固定幅+カンマ区切りのようなものです。現在のファイルの行は、各行に行終端文字を含む複数の行を構成します。この形式は、ほとんどのローディング/外部表ツールではサポートされていません。 。巨大なファイルから空白行を削除し、sedを使用して区切りファイルを作成

削除するには私がこれまでにsedを試してみました -

zcat myfile.txt.gz | sed 's/^\ *$/%%%/g' | xargs | sed -e 's/%%%/\n/g' -e 's/\ //g' > myfile.txt 

上記のファイルが変換され、すべてが正常に見えた。しかし、行の一部が正しく変換されていないことに気付きました。例、いくつかの行には私はちょうど117の列があります。

sedには何がありますか?これを行うためのより良い/より速い方法がありますか?私が扱っているファイルは、圧縮されていないそれぞれ約25GBであり、それらのファイルは100以上あります。

Sample input

Desired Output(サンプル入力の最初の2行)

+0

あなたの予想出力は何をそのファイルから? – Inian

+1

サンプル入力とそのサンプル入力用の希望の出力を質問に追加してください**。 – Cyrus

+0

サンプル入力と希望する出力で質問を更新しました。 –

答えて

1

私は実際にそれをこのように行うだろう:私は常に168カラム(167コンマ)を取得するサンプル入力で

zcat myfile.txt.gz | while read line ; do if test "$line" = "" ; then printf "\r\n" ; else printf "$line" ; fi ;done > myfile.txt 

を。このコードを実行すると、1行にカンマの数を確認できます。得られ

zcat myfile.txt.gz | while read line ; do if test "$line" = "" ; then printf "\r\n" ; else printf "$line" ; fi ;done | sed s/[^,]//g | while read a ; do echo "$a" | wc -c ; done 

出力は、共有所望の出力若干異なっている(私が持っている追加0)

0

私はこれをやってしまったし、それが問題解決:

zcat myfile.txt.gz | sed -r 's/[ ]+/vin/g'|tr -d '\n'|tr 'vinvin' '\n'|grep -v '^$' > myfile.txt 
関連する問題