CSVから特定の範囲の行のみを抽出(およびstdoutにダンプ)しますか?

CSVから特定の範囲の行のみを抽出(およびstdoutにダンプ)しますか?

約1000行のCSVファイルがあります。これをインポートしようとすると、700行でエラーが発生します。ただし、このCSVのエントリには改行文字が含まれて引用されているため、awkQuickなどを使用して行700を実際に表示することはできません。

だから私が見つけたcsvファイルを処理する強力なコマンドラインツールはありますか?csvfix、どちらもインストールされていますが、csvkitこれらのアプリケーションのどれも単に行番号(または行範囲)を指定して出力することをサポートしていないようです。たとえば、

$ csvfix help echo
echo input CSV data to output
usage: csvfix echo [flags] [file ...]
where flags are:
  -ibl      ignore blank input lines
  -sep s    specify CSV field separator character
  -rsep s   as for -sep but retain separator on output
  -osep s   specifies output separator
  -hdr s    write the string s out as a header record
  -ifn      ignore field name record
  -smq      use smart quotes on output
  -sqf fields   specify fields that must be quoted
  -o file   write output to file rather than standard output
  -skip t   if test t is true, do not process or output record

echoエコーする行を指定できる限り、これが私に必要なすべてだと思いました。しかし、私が見るときhttp://neilb.bitbucket.org/csvfix/manual/csvfix16/csvfix.html?unique.html、列のみ説明します。

これらのツール(または他のツール)を使用して、1000行のCSVの700行(または702-705行)を標準出力にダンプするにはどうすればよいですか?


編集:見つかった(http://neilb.bitbucket.org/csvfix/manual/csvfix16/ExpressionLanguage.htmlcsvfix持っている:

csvfix find -if '$line == 407' data.csv

...しかし、これは実際には行番号ではなく行番号です。したがって、行が406行から始まり407行に変わり、407行で終わる場合、上記のコマンドは何も出力しません。行がある場合、その-if '$line == 406'行はダンプされます。これも便利ですが、まだ行番号ではありません...

ベストアンサー1

csvfixfindコマンドは、範囲または数値による行ダンプをサポートします。次のコマンドは、file.csvというファイルから3行と4行を抽出します。

csvfix find -if '$line >= 3 && $line < 5' file.csv

おすすめ記事