Bash Grepping和删除重复项

时间:2014-04-06 05:32:33

标签: bash sed awk grep

对于我的网站,我会记录用户访问过的网页。

看起来像这样:

    admin viewed: page.php
    cata viewed: login.php
    noMadz viewed: buy.php
    floringg0d viewed: search.php
    noMadz viewed: trial.php

我如何使用grep命令将用户列表看起来像这样:

    admin
    cata
    noMadz
    floringg0d

我也想删除重复项。

谢谢!

5 个答案:

答案 0 :(得分:6)

使用awk

awk '!a[$1]++{print $1}' file

答案 1 :(得分:2)

单独使用awk:

awk '!($1 in seen){seen[$1]++; print $1}' file
admin
cata
noMadz
floringg0d

答案 2 :(得分:2)

仅使用awk

$ awk '!($1 in tmp){tmp[$1]=$1} END {asort(tmp); for (i in tmp){print tmp[i]}}' file
admin
cata
floringg0d
noMadz

无需将sortuniqcat等其他命令或程序与awk一起使用。

使用cutsort

$ cut -d " " -f1 file|sort -u
admin
cata
floringg0d
noMadz

在这种情况下无需使用uniq

使用egrepsort

$ egrep -o "^[A-Za-z0-9]+" file|sort -u
admin
cata
floringg0d
noMadz

答案 3 :(得分:1)

你会想在这里使用剪切

cat <yourfile> | cut -f1 -d" " | sort | uniq

如果您想计算可以执行此操作的用户数

cat <yourfile> | cut -f1 -d" " | sort | uniq -c

如果您想按用户出现的次数排序

cat <yourfile> | cut -f1 -d" " | sort | uniq -c | sort -n

cut,sort和uniq是你的朋友。请记住,在你unq之前你总是需要排序。

答案 4 :(得分:0)

您可以使用awk,

awk '{ print $1 }' file | sort -u

示例:

$ (echo "admin viewed: page.php"; echo "cata viewed: login.php"; echo "noMadz viewed: buy.php"; echo "noMadz viewed: trial.php") | awk '{ print $1 }' | sort -u
admin
cata
noMadz