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. CS229 机器学习课程复习材料-线性代数

    本文是斯坦福大学CS 229机器学习课程的基础材料,原始文件下载 原文作者:Zico Kolter,修改:Chuong Do, Tengyu Ma 翻译:黄海广 备注:请关注github的更新,线性代 ...

  2. CS5218替代AG6310方案|设计DP转HDMI转换方案|替代AG6310方案

    AG6310是一款实现显示端DP口转HDMI数据转换器.AG6310是一款单芯片解决方案,通过DP端口连接器传输视频和音频流,其DP1.2支持可配置的1.2和4通道,分别为1.62Gbps.2.7Gb ...

  3. 使用 windows bat 脚本命令 一键启动MySQL服务

    @echo off rem Copyright (c) 2019 Moses and/or its affiliates. rem Get Administrator Rights >nul 2 ...

  4. 编写Java程序,使用List集合和Map集合输出 市和区

    如图: 代码: import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java ...

  5. DOTween实现缓动变值动效

    DOTween.To(getter, setter, to, float duration) 是常用的一个变值方法(一定时间将某变量从起始值到终点值进行变化),可以便捷实现 滚分.涨进度条 等功能 但 ...

  6. Linux shc 命令手册

    shc Generic shell script compiler. https://www.linux-man.cn/command/shc/ #Compile a shell script: sh ...

  7. [ SQLAlchemy ] 经验总结、QA

    1.filter 和 filter_by [ 共同点 ]:查询后,用于过滤数据 [ 不同点 ]: 1.filter:过滤查询后的数据,用SQL表达式 session.query(MyClass).fi ...

  8. java 8 - java 17 升级指北

    2014年发布的java SE 8和2017年发布的java EE 8,至今还是使用最广泛的java版本,大部分java开发者对于java 8之后的升级总是敬而远之,这跟java 9以后的破坏性升级和 ...

  9. 安装DataX的管理控制台(转)

    原文地址 https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md 环境准备 1)基础 ...

  10. Hybrid App(混合开发) 移动端开发调试

    1.下载项目,npm install安装依赖 本地运行 npm run dev(根据具体packjson配 置而定) 2.局域网访问:http://172.20.9.35:8080/ 3.手机端访问: ...