2

このような入力を解析するには助けが必要です。

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 の 2 列目に 1 がある場合、2 列目に 0 があり、1 列目に同じ IP がある行を削除します。したがって、私の出力は次のようになります。

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

awk、sedなどを使用して実行できると思いますが、その方法がわかりません。私の質問を正しく説明できれば幸いです。ありがとう...

4

6 に答える 6

2

一方通行:

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
于 2012-08-29T07:30:13.997 に答える
2

これはうまくいくかもしれません(GNU sed):

cat -n file | 
sort -k2,2 -k3,3nr | 
sed ':a;$!N;/^\s*\S*\s*\(\S*\)\s*1\s*\n.*\1/s/\n.*0\s*//;ta;P;D' | 
sort -n | 
sed 's/^\s*\S*\s*//'
于 2012-08-29T07:30:51.773 に答える
1

Perl ソリューション:

perl -nae '$h{ $F[0] } += $F[1]
           }{
           print "$k ", $v ? 1 : 0, "\n" while ($k, $v) = each %h'
于 2012-08-29T07:38:01.957 に答える
1

いくつかのsorts を行う必要があります。

sort file -r | sort -u -k1,1

前者の並べ替えでは、すべての IP で 2 列目が 1 の行が最初になるように行が並べられます。

後者の並べ替えでは、各 IP の最初のエントリのみが保持されます: -u-> 一意、-k1,1-> 最初の列のみ。

于 2012-08-29T07:52:50.800 に答える
1
awk '{a[$1]+=$2}END{for(i in a)print i,a[i]}' your_file
于 2012-08-29T07:54:57.193 に答える
1

関数型アプローチ (haskell プログラミング言語):

-- function that having the two sublists with '0' and '1' ips,
-- filters and puts into   the '1' 
-- sublist all the '0' ips that are not included in '1'

fil [] result = result
fil (x: xs) result | (init x `elem` (map init result)) == False = fil xs (x:result)
            | otherwise = fil xs result


-- function that filters '0' and '1' sublists
getsublist alist character = filter (\x-> (last x) == character) alist



> let a = ["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"]

> let b = getsublist a '0'

> let c = getsublist a '1'

> fil b c

出力:

["192.168.0.148: 0","192.168.0.198: 0","192.168.0.168: 1","192.168.0.158: 1"] 
于 2012-08-29T09:06:16.340 に答える