bash - 如何根据 bash 中的列变量解析输入

标签 bash parsing sed awk

我需要帮助来解析这样的输入。

192.168.0.168: 1
192.168.0.158: 0
192.168.0.198: 0
192.168.0.148: 0
192.168.0.158: 1
192.168.0.168: 0

如果任何 ip 的第二列中有 1,我想删除第二列中有 0 且第一列中有相同 ip 的行。所以我的输出应该是这样的。

192.168.0.168: 1
192.168.0.198: 0
192.168.0.148: 0
192.168.0.158: 1

我想这可以通过使用 awk、sed 等来完成,但我不知道该怎么做。我希望我能正确解释我的问题。谢谢...

最佳答案

一种方式:

awk '
    { 
        ips[ $1 ] = ( ips[ $1 ] == 1 ) ? 1 : $2 
    } 
    END { 
        for ( ip in ips ) { 
            print ip, ips[ ip ] 
        } 
    }
' infile

这会产生(输出可能是无序的):

192.168.0.168: 1
192.168.0.198: 0
192.168.0.148: 0
192.168.0.158: 1

关于bash - 如何根据 bash 中的列变量解析输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172300/

相关文章:

linux - 在 Linux 中将文件列表从一个位置复制到另一个位置

parsing - 在 Clojure 中缓存解析的数据

html - 如何注释多行html代码?

sed n 似乎不像我想象的那样工作

bash - 在 bash 脚本中出现 "command not found"错误

linux - 从键盘 bash 脚本控制变量

java - -bash : solr: command not found in Mac

java - 用 Java 解析 ASN.1 二进制数据

Android - 数据库与文件系统和对象

bash - 如果列为空,awk 打印一些东西