355686行と1048576行の間の行を削除したい.csvファイルがあります。
ターミナル(MacOSx)で次のコマンドを使用しました:
sed -i.bak -e '355686,1048576d' trips3.csv
これにより、trips3.csv.bakというファイルが生成されますが、Excelで再度開いた場合でも、合計で1,048,576行あります。
あなたが持っているどんな考えや提案も歓迎され、感謝されます!
問題は、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
部分を省略できます。)
osx sedの実装についてはよくわかりませんが、バックアップ拡張子を付けて-iフラグを渡すと、gnusedの実装は最初に元のファイルを指定されたバックアップにコピーし、元のファイルをインプレースで変更します。元のファイルtrip3.csvの行数が減ることを期待する必要があります
仕事をするべきいくつかの呪文(Rubyがインストールされている場合は明らかに)
ruby -pe 'exit if $. > 355686' < trips3.csv > output.csv
Perl / Pythonを好む場合は、ドキュメントに従って同様のことを行うだけで問題ありません。:)
また、私はDaveによるRubyワンライナーの1つを使用しています。
編集:申し訳ありませんが、stdoutをファイルにリダイレクトするには'>output.csv'が必要であると言うのを忘れました。
awk '!(NR>355686 && NR <1048576)' your_file