xargs、sort、uniq命令
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
xargs、sort、uniq命令的更多相关文章
- linux sort uniq命令详解
sort 功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+&l ...
- Linux sort uniq 命令。简单运用
-n #代表以数字方法排序,如果倒序加上-r -t ':' #-t指定分隔符-k ...
- sort,uniq命令
文本排序:sort 默认以ASCII表排序 -n:数值排序 -r: 降序 -t: 字段分隔符 -k: 以哪个字段为关键字进行排序 -u: 排序后相同的行只显示一次 ...
- Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs
在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail ...
- 【转帖】linux sort,uniq,cut,wc,tr,xargs命令详解
linux sort,uniq,cut,wc,tr,xargs命令详解 http://embeddedlinux.org.cn/emb-linux/entry-level/201607/21-5550 ...
- linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解
一.校验与核实 目前最为出名的校验技术是md5sum和sha1sum,它们对文件内容使用相应的算法来生成校验和. 举例: amosli@amosli-pc:~/learn$ md5sum text.t ...
- [转]linux sort,uniq,cut,wc命令详解
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...
- linux sort,uniq,cut,wc命令详解
linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...
- linux sort,uniq,cut,wc,tr命令详解
sort是在Linux里非常常用的一个命令,对指定文件进行排序.去除重复的行 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sor ...
随机推荐
- element 表格只展开一行(点击下一行上一行关闭)
源码:第一步 <el-table :data="tableData" border :row-class-name="tableRowClassName" ...
- Eclipse启动SpringCloud微服务集群的方法
1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...
- 【Linux】Linux安装Tomcat
1.下载Tomcat 链接:Tomcat下载链接 提取码:88ae 链接:Xshell下载链接 提取码:439l 2.创建一个文件夹,上传tomcat到此文件夹 [root@localhost bin ...
- 日志收集系统系列(四)之LogAgent优化
实现功能 logagent根据etcd的配置创建多个tailtask logagent实现watch新配置 logagent实现新增收集任务 logagent删除新配置中没有的那个任务 logagen ...
- 基于华为云服务器的FTP站点搭建
前言 主要介绍了华为云上如何使用弹性云服务器的Linux实例使用vsftpd软件搭建FTP站点.vsftpd全称是"very secure FTP daemon",是一款在Linu ...
- Solon Web 开发,八、校验、及定制与扩展
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Spark-寒假-实验3
1.安装 Hadoop 和 Spark 进入 Linux 系统,参照本教程官网"实验指南"栏目的"Hadoop 的安装和使用",完成 Hadoop 伪分布式模式 ...
- Spark-寒假-实验1
(1)切换到目录 /usr/bin: $ cd /usr/bin (2)查看目录/usr/local 下所有的文件: $cd /usr/local $ls (3)进入/usr 目录,创建一个名为 ...
- ClassCastException: java.util.Date cannot be cast to java.sql.Date
解决办法 /** * 单个方法,作用,根据输入的day:yyyy-mm-dd格式的字符日期,将数据库中的该天所有数据更新为0 * 0表示假期 * @param day * @throws SQLExc ...
- 【算法】Manacher算法
最长回文串问题 manacher算法是用来求解最长回文串的问题.最长回文串的解法一般有暴力法.动态规划.中心扩展法和manacher算法. 暴力法的时间复杂度为\(O(n^3)\),一般都会超时: 动 ...