0

355686行と1048576行の間の行を削除したい.csvファイルがあります。

ターミナル(MacOSx)で次のコマンドを使用しました:

sed -i.bak -e '355686,1048576d' trips3.csv 

これにより、trips3.csv.bakというファイルが生成されますが、Excelで再度開いた場合でも、合計で1,048,576行あります。

あなたが持っているどんな考えや提案も歓迎され、感謝されます!

4

4 に答える 4

3

問題は、Excelがキャリッジリターン(\ r、8進数の015)を使用してレコードを分離しているのに対し、sedは行が改行(\ n、8進数の012)で区切られていることを前提としていることです。これは、sedがファイル全体を1つの非常に長い行として扱うことを意味します。CRを行区切り文字として認識するためにsedを取得する簡単な方法はないと思いますが、perlを使用すると簡単です。

perl -n -015 -i.bak -e 'print if $. < 355686 || $. > 1048576' trips3.csv

(注:1048576がファイル内の「行」の数である場合は、その|| $. > 1048576部分を省略できます。)

于 2012-10-07T04:32:13.493 に答える
3

osx sedの実装についてはよくわかりませんが、バックアップ拡張子を付けて-iフラグを渡すと、gnusedの実装は最初に元のファイルを指定されたバックアップにコピーし、元のファイルをインプレースで変更します。元のファイルtrip3.csvの行数が減ることを期待する必要があります

于 2012-10-07T02:36:21.703 に答える
0

仕事をするべきいくつかの呪文(Rubyがインストールされている場合は明らかに)

ruby -pe 'exit if $. > 355686' < trips3.csv > output.csv

Perl / Pythonを好む場合は、ドキュメントに従って同様のことを行うだけで問題ありません。:)

また、私はDaveによるRubyワンライナーの1つを使用しています。

編集:申し訳ありませんが、stdoutをファイルにリダイレクトするには'>output.csv'が必要であると言うのを忘れました。

于 2012-10-07T04:21:22.947 に答える
0
awk '!(NR>355686  && NR <1048576)' your_file
于 2012-10-08T08:55:21.600 に答える