Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash灰显和删除重复项_Bash_Sed_Awk_Grep - Fatal编程技术网

Bash灰显和删除重复项

Bash灰显和删除重复项,bash,sed,awk,grep,Bash,Sed,Awk,Grep,对于我的网站,我会记录用户访问的页面 看起来是这样的: admin viewed: page.php cata viewed: login.php noMadz viewed: buy.php floringg0d viewed: search.php noMadz viewed: trial.php admin cata noMadz floringg0d 我如何使用grep命令生成如下所示的用户列表: adm

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

看起来是这样的:

    admin viewed: page.php
    cata viewed: login.php
    noMadz viewed: buy.php
    floringg0d viewed: search.php
    noMadz viewed: trial.php
    admin
    cata
    noMadz
    floringg0d
我如何使用grep命令生成如下所示的用户列表:

    admin viewed: page.php
    cata viewed: login.php
    noMadz viewed: buy.php
    floringg0d viewed: search.php
    noMadz viewed: trial.php
    admin
    cata
    noMadz
    floringg0d
我还想删除重复项

谢谢

您可以使用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
单独使用awk:

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

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

您将要在此处使用cut

cat <yourfile> | cut -f1 -d" " | sort | uniq
cat | cut-f1-d | sort | uniq
如果你想计算用户数量,你可以这样做

cat <yourfile> | cut -f1 -d" " | sort | uniq -c
cat | cut-f1-d | sort | uniq-c
如果你想按用户出现的次数排序

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

cut、sort和uniq是你的朋友。只要记住,你总是要排序之前,你uniq

仅使用
awk

$ awk '!($1 in tmp){tmp[$1]=$1} END {asort(tmp); for (i in tmp){print tmp[i]}}' file
admin
cata
floringg0d
noMadz
无需使用其他命令或程序,如
sort
uniq
cat
awk

使用
cut
sort

$ cut -d " " -f1 file|sort -u
admin
cata
floringg0d
noMadz
$ egrep -o "^[A-Za-z0-9]+" file|sort -u
admin
cata
floringg0d
noMadz
在这种情况下,无需使用
uniq

使用
egrep
sort

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

这里不需要
cat
。应该是
cut-f1-d”“| sort | uniq
,这是真的,我试图表明您可以通过管道将其他一些输入传输到
cut
,这是
cut
最常见的用法,
sort
等。例如
grep something file | cut…
不需要
sort
uniq
对于第一个,
cut-f1-d”“| sort-u
我不认为
grep something file | cut…
因为你可以只做
awk'/something/{print…}'file
。你应该使用
sort-u
而不是
sort | uniq
,而且在awk中使用其他命令或程序是没有用的(例如,请参见我的答案)。如果有简单的答案,为什么我们要选择更难的呢?@AvinashRaj使用
awk
的解决方案可能更长(而不是更难),但是比输出被不必要地重定向到其他程序的
awk
解决方案更高效;)然而,@anubhava的解决方案写起来更短,并且产生相同的结果,因此这是一个好的解决方案。+1表示不获取,其输出不必要地转移到其他程序的awk解决方案