- 항목 목록
인터페이스 주소:
abcd_Server1 CCDDomain
defg_Server1 GGFDomain
kdkhs_Server1 CCDDomain
abce_Server1 CCDDomain
dgdg_Server1 CCADomain
dfdkhs_Server1 GGFDomain
"Domain"이라는 단어를 검색한 다음 해당 단어의 고유한 발생 횟수를 계산해야 합니다.
CCDDomain
위의 예에서는 3개의 다른 이름( , GGFDomain
, CCADomain
) 이 있으므로 출력은 3이 되어야 합니다.
나는 이것을 사용해 보았습니다 :
grep -oh '*Domain' "ServerNames.txt" | sort -u | wc -l
("-오" 다른 답변에서 얻었습니다)
답변1
발생 횟수가 다를 때마다성격grep
GNU와 호환되는 도메인을 포함합니다 .
다음으로 구분된 단어의 경우간격수치:
<file grep -o '\S*Domain\S*' | sort | uniq -c
~을 위한성격일련의 숫자 또는 밑줄로 정의됩니다(다른 것은 구분 기호입니다.
<file grep -o '\w*Domain\w*' | sort | uniq -c
답변2
\w
일치하는 패턴을 다음과 같은 패턴으로 간단하게 래핑할 수 있습니다 .
% grep -oh "\w*Domain\w*" ServerNames.txt
CCDDomain
GGFDomain
CCDDomain
CCDDomain
CCADomain
GGFDomain
sort -u
그러면 계속할 수 있습니다wc -l
% grep -oh '\w*Domain\w*' ServerNames.txt | sort -u | wc -l
3
답변3
grep -o '[[:alpha:]]*Domain[[:alpha:]]*' ServerNames.txt | sort | uniq | wc -l
또는
grep -o '\w*Domain\w*' ServerNames.txt | sort | uniq | wc -l
[[:alpha:]]*
0개 이상의 문자를 나타냅니다. 따라서 grep
"Domain"을 포함한 일련의 문자를 찾아 정렬 및 고유화를 위해 출력합니다. ( -h
단일 파일만 grep해야 하는 경우에는 필요하지 않습니다.)
답변4
오래됐어awk
방법:
$ awk '$2 ~ /Domain/ && !a[$2]++{ cnt++ }END{ print cnt }' ServerNames.txt
3
GNU의 경우 coreutils
적용할 수 있습니다(항상 Domain
각 행의 두 번째 열로 나타나는 경우).
$ uniq -f1 <(sort -k2 ServerNames.txt) | wc -l
3