0034. shell命令--uniq

目录

34. shell命令--uniq

功能说明

语法格式

选项说明

实践操作

注意事项


34. shell命令--uniq

功能说明

        uniq 是 Linux 和 Unix 系统上的一个常用命令,用于从排序过的文本中删除重复的行。这意味着在使用 uniq 之前,你通常需要对输入文本进行排序(通常使用 sort 命令)。

        uniq 命令来自英文单词 unique 的缩写,中文译为“独特的、唯一的”,其功能是去除文件中的重复内容行。uniq 命令能够去除掉文件中相邻的重复内容行,如果两端相同内容,但中间夹杂了其他文本行,则需要先使用 sort 命令进行排序后再去重,这样保留下来的内容就都是唯一的了。

语法格式

SYNOPSIS
       uniq [OPTION]... [INPUT [OUTPUT]]

选项说明

-c, --count                在每行开头增加重复次数。
-d, --repeated             所有邻近的重复行只被打印一次。
-D                         所有邻近的重复行将全部打印。
--all-repeated[=METHOD]    类似于 -D,但允许每组之间以空行分割。METHOD取值范围{none(默认),prepend,separate}。
-f, --skip-fields=N        跳过对前N个列的比较。
--group[=METHOD]           显示所有行,允许每组之间以空行分割。METHOD取值范围:{separate(默认),prepend,append,both}。
-i, --ignore-case          忽略大小写的差异。
-s, --skip-chars=N         跳过对前N个字符的比较。
-u, --unique               只打印非邻近的重复行。
-z, --zero-terminated      设置行终止符为NUL(空),而不是换行符。
-w, --check-chars=N        只对每行前N个字符进行比较。
--help                     显示帮助信息并退出。
--version                  显示版本信息并退出。

实践操作

0. 环境准备
mkdir -p /test/uniq
cd /test/uniq
echo {a..d} {1..3} {b..g} {1..3} {c..k}
echo {a..d} {1..3} {b..g} {1..3} {c..k} |tr " " "\n" >file1.txt
cat file1.txt
echo -e "test 3\ntest 3\ntest 3\nlinux 2\nlinux 2" >file2.txt
cat file2.txt

1. 对指定的文件进行去重操作
uniq file1.txt    #无法直接去重
uniq file2.txt    #可以直接去重
sort file1.txt |uniq    #先排序,后去重
sort -u file1.txt
sort file1.txt |uniq |wc -l

uniq file1.txt |wc -l

2. 统计相同内容行在文件中重复出现的次数
sort file1.txt |uniq -c
uniq -c file2.txt
cat /etc/passwd
cat /etc/passwd |tr ':' '\n' 
cat /etc/passwd |tr ':' '\n' |sort
cat /etc/passwd |tr ':' '\n' |sort |uniq -c
cat /etc/passwd |tr ':' '\n' |sort |uniq -c |sort -rn
cat /etc/passwd |tr ':' '\n' |sort |uniq -c |sort -rn |wc -l
cat /etc/passwd |tr ':' '\n' |wc -l
#这里,tr ':' '\n' 将文件中的所有空格替换为换行符,从而将每个单词转换为其自己的行。
#然后,我们使用 sort、uniq 和 sort -nr 来计算并显示每个单词的出现次数(按降序排列)。

3. 仅显示指定文件中没有存在完全相同内容行的信息(只显示单一行,区别在于是否执行排序)
sort file1.txt |uniq -u
uniq -u file2.txt

4. 仅显示指定文件中存在完全相同内容行的信息
sort file1.txt |uniq -d
uniq -d file2.txt

注意事项

  • uniq 命令仅对连续重复的行有效。这就是为什么在使用它之前通常需要先进行排序。
  • 如果你不指定输出文件,则默认输出到标准输出(通常是终端或另一个命令的输入)。
  • 你可以将多个选项组合在一起使用,例如 uniq -cd file.txt。
在 Docker 环境中,查看 Nginx 容器的日志信息是诊断问题和监控服务状态的重要手段。可以通过 `docker logs` 命令来查看容器的日志输出,包括启动日志和访问记录。 ### 查看 Nginx 启动日志 使用以下命令查看指定 Nginx 容器的启动日志: ```bash docker logs nginx01 ``` 这条命令会显示容器的标准输出(stdout)和标准错误输出(stderr)中的信息,通常包括 Nginx 的启动过程、配置加载情况以及任何可能发生的错误信息。如果 Nginx 在启动过程中遇到了问题,例如配置文件错误或端口冲突,这些信息都会在这里显示出来 [^1]。 ### 查看 Nginx 访问记录 Nginx 的访问日志通常会被配置为写入到特定的日志文件中,而不是直接输出到容器的标准输出。因此,要查看访问日志,需要进入容器内部或者通过挂载卷的方式访问这些文件。 假设在启动容器时已经将宿主机的 `/usr/local/nginx/logs/` 目录挂载到了容器的 `/var/log/nginx` 目录: ```bash docker run -d -p 80:80 --name nginx80 --restart=always \ -v /usr/local/nginx/html/dist/:/usr/share/nginx/html \ -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /usr/local/nginx/logs/:/var/log/nginx \ -v /usr/local/nginx/conf.d:/etc/nginx/conf.d \ -v /usr/local/nginx/conf/log_format.conf:/etc/nginx/log_format.conf \ nginx:latest ``` 那么可以直接在宿主机上查看 Nginx 的访问日志文件,通常是 `access.log`: ```bash tail -f /usr/local/nginx/logs/access.log ``` 如果希望将访问日志也输出到容器的标准输出以便使用 `docker logs` 查看,则可以在 Nginx 配置文件中设置日志输出路径为 `/dev/stdout`: ```nginx access_log /dev/stdout; error_log /dev/stderr; ``` 这样,所有的访问日志和错误日志都会被输出到容器的标准输出和标准错误流中,从而可以通过 `docker logs` 命令查看到这些日志信息 [^3]。 ### 日志分析 分析 Nginx 的启动日志时,需要注意是否有任何错误消息,例如配置文件加载失败、权限问题或端口冲突等。对于访问日志,可以使用工具如 `awk`、`grep` 或者专门的日志分析工具来提取有用的信息,比如访问频率最高的 IP 地址、请求最多的 URL 等。 例如,使用 `awk` 统计访问次数最多的前 10 个 IP 地址: ```bash awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c | sort -nr | head -n 10 ``` 使用 `grep` 查找特定的请求,比如查找所有 404 错误: ```bash grep 'HTTP/1.1" 404' /usr/local/nginx/logs/access.log ``` 通过这些方法,可以有效地监控和分析 Nginx 容器的日志信息,从而更好地维护和优化服务 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MineGi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值