ソートを使用して列を選択し、カンマ区切り文字 ',' を使用して csv を切り取り、カンマ "text,text" を含む引用符内のデータを無視します。

ソートを使用して列を選択し、カンマ区切り文字 ',' を使用して csv を切り取り、カンマ

パラメータが異なる行と列を含む巨大なcsvファイルを解析しています。ただし、一部のフィールドには、カンマを含む引用符の中に広範な説明が含まれています。引用符内のカンマを無視し、列の並べ替えと切り取りを選択する方法は? quote-comma-quoteを区切り文字として追加しようとしましたが、エラー(無効な引数)が発生したか、バックスラッシュで引用符をエスケープしましたが、エラーも発生しました。

sort  -k12 -t'","' file

または

cut -f 12 -d '","' file

ファイルの行の例:

"GFYZ01001952.1",99.606,"ASTG2327","PREDICTED: kinesin-like protein NACK1 [Elaeis guineensis]","--","centromeric protein E","Kinesin-like protein NACK1 OS=Arabidopsis thaliana GN=NACK1 PE=1 SV=1","Baculovirus polyhedron envelope protein, PEP, C terminus//Autophagy protein Apg6//Basic region leucine zipper//Protein of unknown function (DUF904)",0.005,3.2,3.5,0.00006

ベストアンサー1

CSVは構造化文書形式です。したがって、単純なテキスト操作ツールcut(データが単純でない場合、または)は、CSVファイルを安全かつ便利に処理するのに十分ではありません(フィールドに区切り文字と改行を含めることができますsortsedawk代わりに、CSVをサポートする処理ツールを使用することをお勧めします。ミラーmlr)。

次のMillerコマンドは、ファイルをヘッダーなしのCSVファイルに解析し、12番目のフィールドに基づいて数値を昇順に並べ替えます。

mlr --csv -N sort -n 12 file

CSVデータにヘッダーがある場合は、その-Nオプションを削除して代わりにヘッダー名を使用してください12

mlr --cvs sort -n pvalue file

列 12 を抽出するには、

mlr --csv -N cut -f 12 file

種類そして何が起こっても、私たちは最初の10の結果だけを得ます。

mlr --csv -N sort -n 12 then cut -f 12 then head -n 10 file

-N繰り返しますが、入力にヘッダーがある場合はそれを削除し、代わりにフィールド名を使用してください。


とともにcsvkitcsvsort次の結果を得るために使用できるツールキット:

csvsort -H -c 12 file | tail -n +2

(このtailコマンドは生成されたヘッダーを削除しますcsvsort)または入力のヘッダーを使用して

csvsort -c pvalue file

個々のフィールドを抽出するには、次のコマンドを使用しますcsvcut

csvcut -H -c 12 file

結合するcsvsort

csvsort -H -c 12 file | csvcut -c 12 | head -n +2

またはタイトルを使用して、

csvsort -c pvalue file | csvcut -c pvalue

コマンドがないため、csvhead結果は他の方法で10レコードに制限する必要がありますmlr --csv head -n 10

おすすめ記事