我想删除(从输出中排除)文件中少于 23 列的一些行。例如:
BR1009298 338 1685 5839 1986 21111995 1 1 1 0 20032001 954 31266 1 1 4 5 205 95 27 3 2 BR1009298
BR1009304 339 5835 5797 1986 23011996 0 1 1 0 5081997 961 11189 3 1 3 4 1007 96 28 3 3 BR1009304
BR1009306 340 1578 0 1986 4041997 0 1 1 0 15081997 972 11189 9 1 9 9 501 97 42 3 0
BR1009309 112180 5910 5791 1986 9011996 1 1 1 0 22111999 961 5445 5 1 1 1 1007 96 28 3 4 BR1009309
我想删除第 3 行,因为它只有 22 列。这是一个很大的文件,所有不包含 23 列的行都需要删除。
我怎样才能做到这一点?
答案1
尝试这个 :
awk 'NF >= 23' file
答案2
perl -ane 'if ($#F >= 22) { print }' < t
其中t
包含您的输入数据。
注意它是 22,因为在 perl 中数组的索引从 0 开始。
答案3
并有良好的'ol grep
:
grep -E '(\s+\S+){22}' file.txt
答案4
使用乐(以前称为 Perl6)
~$ raku -ne '.put if .words >= 23;' file > tmp
Raku 的words
例程根据空白进行分割,为您提供所需的列数。如果列数大于或等于 23,则$_.put
输出该行。
仅供参考,.put
是 的缩写$_.put
,其中$_
是 Raku/Perl 的“主题变量”,在本例中是连续的输入行。
注意:将输出重定向到新文件,例如tmp
. Raku 没有-i
用于“就地”编辑文件的标志(事实上,可能永远不会有)。