我有一个大的csv文件(大约1000列),我想提取到一个新的文件中只有列,其中包含“慢性”的标题名称。我怎么能这么做?
例如,如果我有:
gender,chronic_disease1,chronic_disease2
male,2008,2009期望的输出是:
chronic_disease1,chronic_disease2
2008,2009注意:列/字段分隔符为逗号",“。如果没有chronic匹配,那么就根本没有输出。
发布于 2023-03-25 12:55:37
使用米勒 (可从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注意:如果您的输入文件不包含更高级的CSV功能,例如rfc-4180风格的双引用,您可能可以使用更高效的--csvlite引擎。请参阅文件格式-CSV/TSV/ASV/USV/等。
如果没有包含字符串chronic的字段名,并且不希望输出,而不是空记录,则通过Miller的skip-trivial-records子命令传递提取的数据。
mlr --csv cut -r -f 'chronic' then skip-trivial-records file.csvhttps://unix.stackexchange.com/questions/740910
复制相似问题