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 ...
随机推荐
- CS229 机器学习课程复习材料-线性代数
本文是斯坦福大学CS 229机器学习课程的基础材料,原始文件下载 原文作者:Zico Kolter,修改:Chuong Do, Tengyu Ma 翻译:黄海广 备注:请关注github的更新,线性代 ...
- CS5218替代AG6310方案|设计DP转HDMI转换方案|替代AG6310方案
AG6310是一款实现显示端DP口转HDMI数据转换器.AG6310是一款单芯片解决方案,通过DP端口连接器传输视频和音频流,其DP1.2支持可配置的1.2和4通道,分别为1.62Gbps.2.7Gb ...
- 使用 windows bat 脚本命令 一键启动MySQL服务
@echo off rem Copyright (c) 2019 Moses and/or its affiliates. rem Get Administrator Rights >nul 2 ...
- 编写Java程序,使用List集合和Map集合输出 市和区
如图: 代码: import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java ...
- DOTween实现缓动变值动效
DOTween.To(getter, setter, to, float duration) 是常用的一个变值方法(一定时间将某变量从起始值到终点值进行变化),可以便捷实现 滚分.涨进度条 等功能 但 ...
- Linux shc 命令手册
shc Generic shell script compiler. https://www.linux-man.cn/command/shc/ #Compile a shell script: sh ...
- [ SQLAlchemy ] 经验总结、QA
1.filter 和 filter_by [ 共同点 ]:查询后,用于过滤数据 [ 不同点 ]: 1.filter:过滤查询后的数据,用SQL表达式 session.query(MyClass).fi ...
- java 8 - java 17 升级指北
2014年发布的java SE 8和2017年发布的java EE 8,至今还是使用最广泛的java版本,大部分java开发者对于java 8之后的升级总是敬而远之,这跟java 9以后的破坏性升级和 ...
- 安装DataX的管理控制台(转)
原文地址 https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md 环境准备 1)基础 ...
- Hybrid App(混合开发) 移动端开发调试
1.下载项目,npm install安装依赖 本地运行 npm run dev(根据具体packjson配 置而定) 2.局域网访问:http://172.20.9.35:8080/ 3.手机端访问: ...