大きなcsvファイル(約1000列)があり、ヘッダー名に「慢性」という単語を含む列だけを新しいファイルに抽出したいと思います。どうすればいいですか?
たとえば、次のような場合があります。
gender,chronic_disease1,chronic_disease2
male,2008,2009
希望の出力は次のとおりです。
chronic_disease1,chronic_disease2
2008,2009
注:列/フィールドの区切り文字はカンマ「、」です。一致するものがない場合、chronic
出力はまったくありません。
ベストアンサー1
使用ミラー(Ubuntuの「ユニバース」リポジトリで利用可能です)対応する動詞cut
は、オプションで正規表現を使用してフィールド名を一致させることができます。
mlr --csv cut -r -f 'chronic' file.csv
chronic
(フィールド名の部分文字列と一致)またはより具体的に
mlr --csv cut -r -f '^chronic_' file.csv
(サブストリングを名前の先頭に固定し、後ろにアンダースコアを付けます)
mlr --csv cut -r -f '"^chronic_"i' file.csv
後者を大文字と小文字を区別せずに一致させます。
一致を元に戻すには、すべての列を選択してください。いいえ一致^chronic_
、追加-x
:
mlr --csv cut -x -r -f '"^chronic_"i' file.csv
--csvlite
注:入力ファイルに高度なCSV機能(RFC-4180スタイルの二重引用符など)が含まれていない場合は、より効率的なエンジンを使用できます。バラよりファイル形式 - CSV/TSV/ASV/USV/など。
文字列を含むフィールド名がなく、空のchronic
レコードの代わりに出力がまったく必要ない場合は、skip-trivial-records
抽出したデータをMillerのサブコマンドで渡します。
mlr --csv cut -r -f 'chronic' then skip-trivial-records file.csv