2014-04-06 2 views
-1

내 웹 사이트의 경우 사용자가 방문한 페이지의 기록을 유지합니다.Bash 그리기 및 중복 제거

그것은 다음과 같습니다 : 나는 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 

가 나는 또한 중복을 제거 할.

감사합니다.

답변

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 
+2

대신'종류의 종류 -u''사용해야 | uniq'하고 (예를 들어 내 대답을 참조) AWK와 다른 명령이나 프로그램을 사용하는 것이 유용하지 않습니다. –

2

은 AWK 혼자 사용 :

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

awk으로 :

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

+1에 대한 awkome :) – zx81

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 

잘라 내기, 정렬 및 uniq은 친구입니다. 유니크 전에 항상 정렬해야한다는 것을 기억하십시오.

+2

여기에'고양이'가 필요하지 않습니다. 'cut -f1 -d "이어야합니다" | 정렬 | uniq' –

+0

사실,'cut ','sort' 등의 가장 일반적인 사용법 인'cut'에 다른 입력을 파이프 할 수 있다는 것을 보여 주려고했습니다. 예를 들어'grep something file | 자르다 ...' –

+1

첫번째'cut -f1 -d ""|에'sort'와'uniq'가 둘 다 필요 없습니다. sort -u' – BroSlow

2

awk 사용 :

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

필요 없음을 awksort, uniq 또는 cat 같은 다른 명령이나 프로그램을 사용할 수 있습니다.

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 
+0

단순한 대답을 사용할 수 있다면 왜 더 힘든 질문을해야합니까? –

+0

@AvinashRaj'awk'를 사용한 해결책은 더 길지는 않지만 (더 어렵지는 않지만) 출력이 불필요하게 다른 프로그램으로 리다이렉트되는'awk' 솔루션보다 더 효율적일 수 있습니다;) –

+0

그러나 @anubhava의 해결책은 쓰기가 더 짧고 동일한 결과이므로 좋은 해결책입니다. –