首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从CSV文件中提取其名称中包含“慢性”一词的列

如何从CSV文件中提取其名称中包含“慢性”一词的列
EN

Unix & Linux用户
提问于 2023-03-25 11:58:48
回答 1查看 523关注 0票数 2

我有一个大的csv文件(大约1000列),我想提取到一个新的文件中只有列,其中包含“慢性”的标题名称。我怎么能这么做?

例如,如果我有:

代码语言:javascript
复制
gender,chronic_disease1,chronic_disease2
male,2008,2009

期望的输出是:

代码语言:javascript
复制
chronic_disease1,chronic_disease2
2008,2009

注意:列/字段分隔符为逗号",“。如果没有chronic匹配,那么就根本没有输出。

EN

回答 1

Unix & Linux用户

发布于 2023-03-25 12:55:37

使用米勒 (可从Ubuntu“宇宙”存储库获得),其cut谓词可以选择使用正则表达式匹配字段名:

代码语言:javascript
复制
mlr --csv cut -r -f 'chronic' file.csv

(匹配字段名中任何位置的子字符串chronic ),或者更具体地说

代码语言:javascript
复制
mlr --csv cut -r -f '^chronic_' file.csv

(将子字符串锚定到名称的开头,并添加尾随下划线)或

代码语言:javascript
复制
mlr --csv cut -r -f '"^chronic_"i' file.csv

使后一种情况不敏感。

要反转匹配,即选择所有不匹配的^chronic_列,添加-x

代码语言:javascript
复制
mlr --csv cut -x -r -f '"^chronic_"i' file.csv

注意:如果您的输入文件不包含更高级的CSV功能,例如rfc-4180风格的双引用,您可能可以使用更高效的--csvlite引擎。请参阅文件格式-CSV/TSV/ASV/USV/等。

如果没有包含字符串chronic的字段名,并且不希望输出,而不是空记录,则通过Miller的skip-trivial-records子命令传递提取的数据。

代码语言:javascript
复制
mlr --csv cut -r -f 'chronic' then skip-trivial-records file.csv
票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/740910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档