xargs、sort、uniq命令
2024-10-20 00:22:35
xargs、sort、uniq命令,我们由LeetCode的一道题来引入,并使用加以理解;
题目是这样的:写一个 bash 脚本以统计一个文本文件 words.txt
中每个单词出现的频率。
words.txt的内容为:
the day is sunny the the
the sunny is is
1.cat words.txt | sort 来看下会是什么效果
[root@Server-n93yom tmp]# cat words.txt | sort
the day is sunny the the
the sunny is is
sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列,并将结果输出到标准输出。
2.使用 cat words.txt | xargs -n1 | sort | uniq -c 看下是什么效果
[root@Server-n93yom tmp]# cat words.txt | xargs -n1 | sort | uniq -c
1 day
3 is
2 sunny
4 the
uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起,这就是为什么要先sort的原因;-c 是统计数量
3.使用 cat words.txt | xargs -n1 | sort | uniq -c | sort -nr 看下是什么效果
[root@Server-n93yom tmp]# cat words.txt | xargs -n1 | sort | uniq -c | sort -n
1 day
2 sunny
3 is
4 the
[root@Server-n93yom tmp]# cat words.txt | xargs -n1 | sort | uniq -c | sort -nr
4 the
3 is
2 sunny
1 day
sort -n 是按照数字进行排序,默认是升序的,-r是降序,所以sort -nr就是按照数字进行降序排序
4. 再结合上awk命令输出结果即可:
cat words.txt | xargs -n1 | sort | uniq -c | sort -nr | awk '{print $2" "$1}'
[root@Server-n93yom tmp]# cat words.txt | xargs -n1 | sort | uniq -c | sort -nr | awk '{print $2" "$1}'
the 4
is 3
sunny 2
day 1
下面介绍下xargs命令:
1. cat words.txt | xargs 是把文本变为一行输出
[root@Server-n93yom tmp]# cat words.txt | xargs
the day is sunny the the the sunny is is
加上-n 数字 把文本变成多行输出,数字是每行的单词数
[root@Server-n93yom tmp]# cat words.txt | xargs -n1
the
day
is
sunny
the
the
the
sunny
is
is
xargs -dx 指定分隔符进行输出
[root@Server-n93yom tmp]# echo "nameXnameXnameXname" | xargs -dX
name name name name
定义一个脚本sk.sh
#!/bin/bash
#sk.sh命令内容,打印出所有参数。 echo $*
然后执行命令:cat words.txt | xargs -I {} ./sk.sh -p {} -l
xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:
[root@Server-n93yom tmp]# cat words.txt | xargs -I {} ./sk.sh -p {} -l
-p the day is sunny the the -l
-p the sunny is is -l
把当前文件夹下所有的.sh文件copy到tmp文件下
ls *.sh | xargs -n1 -I {} cp {} /root/tmp/
[root@Server-n93yom ~]# ll
total 20-rw-r--r-- 1 root root 49 Aug 15 17:01 mysql.sh-rw-r--r-- 1 root root 640 Aug 15 17:13 upgrade.sh
[root@Server-n93yom ~]# ls *.sh | xargs -n1 -I {} cp {} /root/tmp/
[root@Server-n93yom ~]# cd tmp/
[root@Server-n93yom tmp]# ll
total 20
-rw-r--r-- 1 root root 49 Aug 22 22:53 mysql.sh
-rw-r--r-- 1 root root 1559 Aug 19 23:13 passwd
-rwxr-xr-x 1 root root 21 Aug 22 22:44 sk.sh
-rw-r--r-- 1 root root 640 Aug 22 22:53 upgrade.sh
-rw-r--r-- 1 root root 41 Aug 22 14:03 words.txt
xargs 结合 find 使用
用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题: find . -type f -name "*.log" -print0 | xargs -0 rm -f
xargs -0 将 \0 作为定界符。 统计一个源代码目录中所有 php 文件的行数: find . -type f -name "*.php" -print0 | xargs -0 wc -l
查找所有的 jpg 文件,并且压缩它们: find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
xargs 其他应用 假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接: # cat url-list.txt | xargs wget -c
参考:https://www.runoob.com/linux/linux-comm-xargs.html
最新文章
- 【python】如何在某.py文件中调用其他.py内的函数
- “耐撕”团队 2016.04.06 站立会议
- August 4th, 2016, Week 32nd, Thursday
- Hibernate4.2.2使用Annotation配置
- android客户端从服务器端获取json数据并解析的实现代码
- php生成json和js解析json
- lambda 表达式 自定义查询
- Maven快速搭建GUI项目
- JavaScript焦点事件、鼠标事件和滚轮事件使用详解
- 深入理解javascript执行上下文(Execution Context)
- IOS应用FFMPEG库
- DataPipeline创始人&;CEO 陈诚:沃森与AI
- SKCTF Writeup
- Java学习笔记之——常用类
- djongo:Django和MongoDB连接器
- 获取进程ID,父进程ID,进程完整路径
- 【Selenium专题】鼠标键盘事件
- Shell脚本中实现自动补全功能
- Codeforces 711D Directed Roads - 组合数学
- 《实时控制软件设计》之Automation Studio开发环境
热门文章
- CS5212 pin to pin 替代RTD2166|DP转VGA芯片|CS5212转换电路设计方法
- 单芯片CS5265替代VL102+PS176|设计USB TYPEC转HDMI方案|替代VL102+PS176
- Hive安装Version2.1.0
- 实践剖析.NET Core如何支持Cookie和JWT混合认证、授权
- oracle 之 cursor:创建存储过程批量执行DDL语句
- CentOS 7 使用unzip解压zip文件提示未找到命令的解决方法
- vue将HTML字符串解析为HTML标签
- Vue系列教程(三)之vue-cli脚手架的使用
- 机器学习术语表——Beta
- 最完整的springboot2.2.x.RELEASE整合springDataElasticsearch 7.6.2