我有一个具有此特定格式的文件:
T 11722 A 330:0:0:0:0:0 315:0:0:0:0:0
T 11723 B 0:330:0:0:0:0 0:316:0:0:0:0
T 11725 C 0:327:0:0:0:0 0:314:0:0:0:0
T 11726 D 330:0:0:0:0:0 314:0:0:0:0:0
T 11727 E 0:6:0:323:0:0 0:6:0:309:0:0
T 11728 F 0:0:0:328:0:0 0:1:0:314:0:0
T 11729 G 0:325:0:0:0:0 0:315:0:0:0:0
我想删除第4列和第5列中没有两个值的所有行。
例如,如果某一行具有特定格式:
T 11722 A 330:0:0:0:0:0 315:0:0:0:0:0
删除它。
如果它具有以下格式(第4列和第5列中每列有两个值):
T 11727 E 0:6:0:323:0:0 0:6:0:309:0:0
保持它。
因此,预期结果应为:
T 11727 E 0:6:0:323:0:0 0:6:0:309:0:0
T 11728 F 0:0:0:328:0:0 0:1:0:314:0:0
我不知道如何在unix下设置一些内容,但我猜应该有一个简单的方法。任何帮助将不胜感激。
非常感谢
答案 0 :(得分:2)
awk 解决方案:
function get_count(s, c, len) { ... }
split(s,a,":")
- 函数返回给定字符串中非零值的计数
s
- 通过分隔符a
将字符串:
拆分为数组while(len--) if(a[len]){ c++ }
T 11727 E 0:6:0:323:0:0 0:6:0:309:0:0
T 11728 F 0:0:0:328:0:0 0:1:0:314:0:0
- 累计非零点数
输出:
{{1}}
答案 1 :(得分:2)
您是否只是尝试打印4美元或5美元中有2个或更多非零值的行?那就是:
$ awk 'gsub(/[1-9][0-9]*/,"&",$4)>1 || gsub(/[1-9][0-9]*/,"&",$5)>1' file
T 11727 E 0:6:0:323:0:0 0:6:0:309:0:0
T 11728 F 0:0:0:328:0:0 0:1:0:314:0:0