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命令的更多相关文章

  1. linux sort uniq命令详解

    sort 功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+&l ...

  2. Linux sort uniq 命令。简单运用

    -n                              #代表以数字方法排序,如果倒序加上-r -t ':'                          #-t指定分隔符-k       ...

  3. sort,uniq命令

    文本排序:sort  默认以ASCII表排序    -n:数值排序    -r: 降序    -t: 字段分隔符    -k: 以哪个字段为关键字进行排序    -u: 排序后相同的行只显示一次   ...

  4. Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs

    在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail ...

  5. 【转帖】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 ...

  6. linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解

    一.校验与核实 目前最为出名的校验技术是md5sum和sha1sum,它们对文件内容使用相应的算法来生成校验和. 举例: amosli@amosli-pc:~/learn$ md5sum text.t ...

  7. [转]linux sort,uniq,cut,wc命令详解

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  8. linux sort,uniq,cut,wc命令详解

    linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...

  9. linux sort,uniq,cut,wc,tr命令详解

    sort是在Linux里非常常用的一个命令,对指定文件进行排序.去除重复的行 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sor ...

随机推荐

  1. element 表格只展开一行(点击下一行上一行关闭)

    源码:第一步 <el-table :data="tableData" border :row-class-name="tableRowClassName" ...

  2. Eclipse启动SpringCloud微服务集群的方法

    1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...

  3. 【Linux】Linux安装Tomcat

    1.下载Tomcat 链接:Tomcat下载链接 提取码:88ae 链接:Xshell下载链接 提取码:439l 2.创建一个文件夹,上传tomcat到此文件夹 [root@localhost bin ...

  4. 日志收集系统系列(四)之LogAgent优化

    实现功能 logagent根据etcd的配置创建多个tailtask logagent实现watch新配置 logagent实现新增收集任务 logagent删除新配置中没有的那个任务 logagen ...

  5. 基于华为云服务器的FTP站点搭建

    前言 主要介绍了华为云上如何使用弹性云服务器的Linux实例使用vsftpd软件搭建FTP站点.vsftpd全称是"very secure FTP daemon",是一款在Linu ...

  6. Solon Web 开发,八、校验、及定制与扩展

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. Spark-寒假-实验3

    1.安装 Hadoop 和 Spark 进入 Linux 系统,参照本教程官网"实验指南"栏目的"Hadoop 的安装和使用",完成 Hadoop 伪分布式模式 ...

  8. Spark-寒假-实验1

    (1)切换到目录 /usr/bin: $ cd /usr/bin (2)查看目录/usr/local 下所有的文件: $cd /usr/local $ls   (3)进入/usr 目录,创建一个名为 ...

  9. ClassCastException: java.util.Date cannot be cast to java.sql.Date

    解决办法 /** * 单个方法,作用,根据输入的day:yyyy-mm-dd格式的字符日期,将数据库中的该天所有数据更新为0 * 0表示假期 * @param day * @throws SQLExc ...

  10. 【算法】Manacher算法

    最长回文串问题 manacher算法是用来求解最长回文串的问题.最长回文串的解法一般有暴力法.动态规划.中心扩展法和manacher算法. 暴力法的时间复杂度为\(O(n^3)\),一般都会超时: 动 ...