我有一个巨大的制表符分隔的文本文件,有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
,因为前面的字段分割已经代表您完成了