我有一个包含50,000行和200列的文件,行/列中的大多数值都是零,所以当有超过100列的值为零时,我想删除所有行。
请建议我任何AWK / unix命令。
由于
答案 0 :(得分:1)
以下是awk
脚本,它将计算输入的每个记录(行)中零值字段的数量,并且只有在此计数未达到100以上时才输出记录。
#!/usr/bin/awk -f
{
zcount = 0;
for (i = 1; i <= NF; ++i) {
if ($i == 0)
++zcount;
if (zcount > 100)
next;
}
print;
}
要运行它,首先使其可执行:
$ chmod script.awk
然后,假设您的数据位于文件data.in
:
$ ./script.awk data.in
或者,不使其可执行:
$ awk -f script.awk data.in
以下脚本变体允许您指定要允许的最大零数:
#!/usr/bin/awk -f
BEGIN { if (zmax == 0) zmax = 100 }
{
zcount = 0;
for (i = 1; i <= NF; ++i) {
if ($i == 0)
++zcount;
if (zcount >= zmax)
next;
}
print;
}
你用
运行它$ ./script.awk -v zmax=90 data.in
如果您离开-v zmax=N
,第二个脚本将默认为100。
答案 1 :(得分:1)
这可能就是你所需要的:
awk 'gsub(/(^|[[:space:]])0([[:space:]]|$)/,"&")<100' file
但是我们没有看到一些样本输入/输出。
答案 2 :(得分:0)
另一个awk
$ awk 'BEGIN{FS=" +0 +"} NF<100' file