Unix grep一个字符串,然后仅在列表中显示该字符串
谁能帮我看看怎么做 我使用netstat查找当前有多少服务器连接到我的服务器,我得到了以下列表,server001和002有许多服务连接到myserver01Unix grep一个字符串,然后仅在列表中显示该字符串,unix,sorting,grep,Unix,Sorting,Grep,谁能帮我看看怎么做 我使用netstat查找当前有多少服务器连接到我的服务器,我得到了以下列表,server001和002有许多服务连接到myserver01 myserver01.1050 server001.com.51535 64860 0 49680 0 ESTABLISHED myserver01.1050 server001.com.36565 64860 0 49680 0 ESTABLISHED myserver01.1050
myserver01.1050 server001.com.51535 64860 0 49680 0 ESTABLISHED
myserver01.1050 server001.com.36565 64860 0 49680 0 ESTABLISHED
myserver01.1050 server002.com.35262 64860 0 49680 0 ESTABLISHED
myserver01.1050 server002.com.41700 64860 0 49680 0 ESTABLISHED
myserver01.1050 server002.com.36525 64860 0 49680 0 ESTABLISHED
myserver01.1050 server002.com.54575 64860 0 49680 0 ESTABLISHED
myserver01.1050 server001.com.44401 64860 0 49680 0 ESTABLISHED
myserver01.1050 server001.com.47922 64860 0 49680 0 ESTABLISHED
myserver01.1050 server001.com.57080 49680 0 49680 0 ESTABLISHED
谁能告诉我如何对列表进行grep或排序,我可以得到一个唯一的服务器名称,比如下面的名称
myserver01.1050 server001.com
myserver01.1050 server002.com
谢谢试试这个:
$ grep myserver01.1050 logfile | \
grep ' server' | \
awk -F\. '{print $1, $2}' | \
sort -u
尽管我无法判断您是只需要服务器名还是只需要一对名称。有点猜测,如果我误解了这个问题,我很抱歉。试试这个:
$ grep myserver01.1050 logfile | \
grep ' server' | \
awk -F\. '{print $1, $2}' | \
sort -u
尽管我无法判断您是只需要服务器名还是只需要一对名称。有点猜测,如果我误解了这个问题,我很抱歉。这有点难看,但它可以工作(
6333197.txt
包含您的netstat输出):
-F
定义输入字段分隔符,()这有点难看,但它可以工作(6333197.txt
包含netstat输出):
-F
定义输入字段分隔符,()所有操作都可以在一行awk命令中完成,如下所示:
awk '{gsub(/\.[0-9]*$/, "", $2); serv[$2]=$1;} END{n=asorti(serv, dest); for (i = 1; i <= n; i++) print serv[dest[i]] " " dest[i];}' file.txt
所有这些都可以在一行awk命令中完成,如下所示:
awk '{gsub(/\.[0-9]*$/, "", $2); serv[$2]=$1;} END{n=asorti(serv, dest); for (i = 1; i <= n; i++) print serv[dest[i]] " " dest[i];}' file.txt
这是一个使用
sed
和sort-u
的版本:
sed 's/^\(\S\S*\s\s*\S\S*\)\.[0-9][0-9]*\s.*/\1/' filename | sort -u
sed -r 's/^(\S+\s+\S+)\.[0-9]+\s.*/\1/' filename | sort -u
分别。使用GNU版本的sed
anssort-u
:
sed 's/^\(\S\S*\s\s*\S\S*\)\.[0-9][0-9]*\s.*/\1/' filename | sort -u
sed -r 's/^(\S+\s+\S+)\.[0-9]+\s.*/\1/' filename | sort -u
这是一个使用
sed
和sort-u
的版本:
sed 's/^\(\S\S*\s\s*\S\S*\)\.[0-9][0-9]*\s.*/\1/' filename | sort -u
sed -r 's/^(\S+\s+\S+)\.[0-9]+\s.*/\1/' filename | sort -u
分别。使用GNU版本的sed
anssort-u
:
sed 's/^\(\S\S*\s\s*\S\S*\)\.[0-9][0-9]*\s.*/\1/' filename | sort -u
sed -r 's/^(\S+\s+\S+)\.[0-9]+\s.*/\1/' filename | sort -u
使用uniq-c
也可以得到一个计数
$ cut -d'.' -f1-3 input | sort | uniq -c
5 myserver01.1050 server001.com
4 myserver01.1050 server002.com
使用uniq-c
也可以得到一个计数
$ cut -d'.' -f1-3 input | sort | uniq -c
5 myserver01.1050 server001.com
4 myserver01.1050 server002.com
使用
sed
和sort
:
sed 's/\(.*\)\..*/\1/' filename | sort -u
使用
sed
和sort
:
sed 's/\(.*\)\..*/\1/' filename | sort -u
谢谢,伙计,是的,我只想要服务器名,只想要唯一的。谢谢,伙计,是的,我只想要服务器名,只想要唯一的。这并不难看,漂亮的外壳极简主义;-)。。。哦,等等,不需要uniq的额外进程,使用
sort-u
;-)@Sheller,越短越好;-)谢谢-斜杠uniq
。奖项竞争者,但在其他方面非常整洁。(+1)那不难看,那漂亮的贝壳极简主义;-)。。。哦,等等,不需要uniq的额外进程,使用sort-u
;-)@Sheller,越短越好;-)谢谢-斜杠uniq
。奖项竞争者,但在其他方面非常整洁。(+1)我认为这会产生一个单一的名称,而不是要求的成对名称。是的,我有一些自由,写它只是为了显示单个唯一的服务器名称,去掉了看起来冗余的信息。我认为这会产生一个单一的名称,而不是要求的成对名称。是的,我有一些自由,写它只是为了显示单个唯一的服务器名称,去除了看起来像是冗余信息的内容。第一个版本,更少的字符:cut-d'.-f1-3输入| sort-u
第一个版本,更少的字符:cut-d'.-f1-3输入| sort-u