删除bash中文本文件中第10列包含空字段的行



我有一个巨大的制表符分隔的文本文件,有10列。现在,我想删除文件中第10列中不包含值的所有行。

例如:

a b c d e f g h i j
4 6 8 9 4 2 1 6 4 2
1 5 9 8 5 1 8 3 6 
1 6 8 5 4 7 7 9 4 7
4 5 8 9 9 2 1 8 4 
3 4 7 5 8 8 2 5 3 6

预期输出:

a b c d e f g h i j
4 6 8 9 4 2 1 6 4 2
1 6 8 5 4 7 7 9 4 7
3 4 7 5 8 8 2 5 3 6

我想使用类似的东西:

awk '$10 == ""' print $0 file

您的命令就快到了。你可以试试这个:

awk '$10 != "" {print}' file
  • $10 != ""这将测试第10个字段是否为空
  • print打印整行

您可以使用打印col 10不为空的每一行

awk '{if ($10) print}' file.txt

$ cat file.txt
a b c d e f g h i j
4 6 8 9 4 2 1 6 4 2
1 5 9 8 5 1 8 3 6
1 6 8 5 4 7 7 9 4 7
4 5 8 9 9 2 1 8 4
3 4 7 5 8 8 2 5 3 6
$
$
$ awk '{if ($10) print}' file.txt
a b c d e f g h i j
4 6 8 9 4 2 1 6 4 2
1 6 8 5 4 7 7 9 4 7
3 4 7 5 8 8 2 5 3 6
$

我使用;简单的";grep:

grep $'.t.t.t.t.t.t.t.t.t.' file.txt

'.'代表任何字符,t代表TAB字符。

如果你想做$1=$1,那么简单一点怎么样?

mawk  'NF*=9<NF'
or
mawk 'NF*=10==NF'

或者甚至比更简单(如果你不在乎$1=$1(

mawk NF==10      # shell-quoting optional for this one
or
mawk '9<NF'
a b c d e f g h i j
4 6 8 9 4 2 1 6 4 2
1 6 8 5 4 7 7 9 4 7
3 4 7 5 8 8 2 5 3 6

或者甚至完全违背直觉但完全符合posix的形式:

mawk '+RS==NF%10' 

不要花时间手动检查$10,因为前面的字段分割已经代表您完成了

最新更新