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解决方案