如何解决Unix grep一个字符串,然后仅在列表中显示该字符串
| 谁能帮我看看如何做。 我使用netstat来查找当前有多少服务器连接到我的服务器,并且我有以下列表,server001和002有许多服务连接到myserver01myserver01.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
谢谢
解决方法
cat netstat.txt | tr -s \' \' | cut -d\" \" -f2 | cut -d. -f1 | sort -u
, $ cut -d\'.\' -f1-3 input | sort | uniq
myserver01.1050 server001.com
myserver01.1050 server002.com
用using4ѭ也可以算
$ cut -d\'.\' -f1-3 input | sort | uniq -c
5 myserver01.1050 server001.com
4 myserver01.1050 server002.com
, 这有点难看,但是可以工作(6333197.txt
包含您的netstat输出):
$ cat 6333197.txt | awk -F \'.\' \'{print $1\".\"$2\".\"$3}\' | sort -u
-F
定义输入字段分隔符,(awk手册页)
, 都可以在1行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
输出(具有以上输入):
myserver01.1050 server001.com
myserver01.1050 server002.com
, 尝试这个:
$ grep myserver01.1050 logfile | \\
grep \' server\' | \\
awk -F\\. \'{print $1,$2}\' | \\
sort -u
尽管我无法告诉您是只需要服务器名称还是仅需要一对名称。有点猜测,如果我误解了这个问题,非常抱歉。
, 这是使用sed
和sort -u
的版本:
sed \'s/^\\(\\S\\S*\\s\\s*\\S\\S*\\)\\.[0-9][0-9]*\\s.*/\\1/\' filename | sort -u
分别使用NU12ѭ和sort -u
的GNU版本:
sed -r \'s/^(\\S+\\s+\\S+)\\.[0-9]+\\s.*/\\1/\' filename | sort -u
, 使用sed
和sort
:
sed \'s/\\(.*\\)\\..*/\\1/\' filename | sort -u
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。