awk:使用文件过滤另一个文件(out.tr)
发布时间:2020-12-14 01:36:13 所属栏目:Linux 来源:网络整理
导读:帮助awk,使用文件过滤另一个文件 我有一个主文件: ...17,466971 0,095185 17,562156 id 67617,096694 17,563665 id 67717,09816 17,565131 id 67817,099625 17,566596 id 67917,101091 17,568062 id 68017,016175 17,483146 id 68117,101793 17,568764 id 6
帮助awk,使用文件过滤另一个文件
我有一个主文件: ... 17,466971 0,095185 17,562156 id 676 17,096694 17,563665 id 677 17,09816 17,565131 id 678 17,099625 17,566596 id 679 17,101091 17,568062 id 680 17,016175 17,483146 id 681 17,101793 17,568764 id 682 17,10253 17,569501 id 683 38,166772 0,08125 38,248022 id 1572 38,082545 38,249317 id 1573 38,233772 0,005457 38,239229 id 1574 38,082113 38,315885 id 1575 38,299771 0,081412 38,381183 id 1576 38,006282 38,306053 id 1577 38,083627 38,383398 id 1578 38,085093 38,384864 id 1579 38,008682 38,308453 id 1580 38,085094 38,384865 id 1581 ... 我想基于这个其他文件,最后一列(id)来抑制/删除一些行: ... d 17.483146 1 0 udp 181 ------- 1 19.0 2.0 681 d 38.239229 1 0 udp 571 ------- 1 19.0 2.0 1574 d 38.306053 1 0 udp 1000 ------- 1 19.0 2.0 1577 d 38.308453 1 0 udp 1000 ------- 1 19.0 2.0 1580 d 38.372207 1 0 udp 546 ------- 1 19.0 2.0 1582 d 38.441845 1 0 udp 499 ------- 1 19.0 2.0 1585 d 38.505262 1 0 udp 616 ------- 1 19.0 2.0 1586 d 38.572324 1 0 udp 695 ------- 1 19.0 2.0 1588 d 38.639246 1 0 udp 597 ------- 1 19.0 2.0 1590 d 38.639758 1 0 udp 640 ------- 1 19.0 2.0 1591 ... 对于上面的示例,结果将是: 17,483146 id 680 17,384865 id 1581 删除的行是: 17,568062 id 681 38,308453 id 1580 是否有使用awk的命令使其自动化? 先感谢您 解决方法
这是使用awk的一种方式:
awk 'FNR==NR { a[$NF]; next } !($NF in a)' other main 结果: 17,384865 id 1581 删除感叹号以显示“已删除”行: awk 'FNR==NR { a[$NF]; next } $NF in a' other main 结果: 17,483146 id 681 38,308453 id 1580 或者,如果您想要两个文件,一个包含值’present’而另一个包含值’deleted’,请尝试: awk 'FNR==NR { a[$NF]; next } { print > ($NF in a ? "deleted" : "present") }' other main Explanation1: FNR == NR {…}是一种常用的构造,仅对参数列表中的第一个文件返回true.在这种情况下,awk将首先读取文件’other’.处理此文件时,最后一列($NF)中的值将添加到数组(我们称之为a).然后跳过处理剩下的代码.一旦读取了第一个文件,FNR将不再等于NR,因此awk将被“允许”跳过FNR – NR {…}块并开始处理应用于该文件的剩余代码.参数列表中的第二个文件’main’.例如,如果$NF不在数组中,则!(a中的$NF)将不会打印该行. 说明2: 关于哪一列,您可能会发现这有用: $1 # the first column $2 # the second column $3 # the third column $NF # the last column $(NF-1) # the second last column $(NF-2) # the third last column (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |