0

これを考えるとfoo.txt

/ビン/バー:
        カーネルベース => /sbin/カーネルベース (0x77670000)
        intl-8 => /usr/bin/intl-8 (0x6f970000)
        iconv-2 => /usr/bin/iconv-2 (0x6f980000)
        pcre-0 => /usr/bin/pcre-0 (0x6f780000)
        gcc_s-1 => /usr/bin/gcc_s-1 (0x6fdd0000)
/ビン/バズ:
        カーネルベース => /sbin/カーネルベース (0x77670000)
        intl-8 => /usr/bin/intl-8 (0x6f970000)
        iconv-2 => /usr/bin/iconv-2 (0x6f980000)

この出力が欲しい

/usr/bin/intl-8
/usr/bin/iconv-2
/usr/bin/pcre-0
/usr/bin/gcc_s-1

つまり、 を含む一意の行を取得/usrし、正しいフィールドを出力したいと考えています。現在、私はパイプを使用しています

grep /usr foo.txt | sort -u | cut -d' ' -f3

awkしかし、これはワンラインコマンドで行うことができますか? 私 は この例に出くわしました

awk '!a[$0]++'

しかし、これを線だけで使用する方法がわかりません/usr

4

2 に答える 2

2
 awk '/\usr/ && ! a[$0]++{print $3}' foo.txt
于 2013-05-01T07:01:54.317 に答える
0

awk のパターン マッチングは、awk の大きな利点の 1 つです。あなたの例では、単純なケースにいくつかのショートカットを使用していますが、同等のコマンドawk '!a[$0]++'は isawk '($0 in a) {a[$0]; print}'であり、追加のパターンを非常に簡単に追加できます。また、3 番目のフィールドのみを出力すると、次のようになります。

awk '/\/usr/ && !($0 in a) {a[$0]; print $3}'
于 2013-05-01T06:15:25.543 に答える