排除少于 23 列的行

排除少于 23 列的行

我想删除(从输出中排除)文件中少于 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用于“就地”编辑文件的标志(事实上,可能永远不会有)。

https://raku.org

相关内容