如何在Bash中提取TSV文件中包含6列的行?
提取TSV文件中指定列数的行
用awk实现(最简便推荐)
awk自带字段计数功能,NF变量代表当前行的字段总数,直接判断等于6就输出:
awk 'NF == 6' input.tsv
要是你的TSV是严格用制表符分隔(避免内容里的空格干扰列计数),可以指定分隔符:
awk -F '\t' 'NF == 6' input.tsv
用sed实现
通过正则匹配有6个字段的行(以空白分隔为例,制表符分隔就把[[:space:]]换成\t):
sed -n '/^[^[:space:]]\+\([[:space:]]\+[^[:space:]]\+\)\{5\}$/p' input.tsv
核心逻辑是匹配「1个非空白字段 + 5组空白+非空白字段」的行,刚好对应6列,-n配合p只打印符合条件的行。
用grep实现
用扩展正则匹配同样逻辑:
grep -E '^[^[:space:]]+([[:space:]]+[^[:space:]]+){5}$' input.tsv
内容的提问来源于stack exchange,提问作者ginlucks
相关产品推荐
相关产品推荐

