1.1.3 组合信息
学习目标
这一节,我们从 paste、xargs、小结、两个方面来学习。
paste命令
合并文件行内容输出到屏幕,不会改动源文件
Mandatory arguments to long options are mandatory for short options too.
-d, --delimiters=列表 改用指定列表里的字符替代制表分隔符
-s, --serial 不使用平行的行目输出模式,而是每个文件占用一行
--help 显示此帮助信息并退出
--version 显示版本信息并退出
文件内容
[root@localhost ~]# cat a.txt
hello
[root@localhost ~]# cat b.txt
world
888
999
内容合并
[root@localhost ~]# paste a.txt b.txt
hello world
888
999
[root@localhost ~]# paste b.txt a.txt
world hello
888
999
自定义分隔符后合并内容
[root@localhost ~]# paste -d'@' b.txt a.txt
world@hello
888@
999@
将一个文件所有内容一行输出
[root@localhost ~]# paste -s b.txt
world 888 999
[root@localhost ~]# paste -d'@' -s b.txt
world@888@999
xargs命令
命令结果传递
作用:
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 一般是和管道一起使用。
命令格式:
somecommand |xargs -item command
OPTIONS:
-a file 从文件中读入作为sdtin
-E flag flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,将xargs接收的每项名称,逐行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
注意:linux命令格式一般为
命令 命令选项 参数
上一个命令的输出就是下一个命令的参数 这句话结合命令语法 应该知道输出的内容在下一个命令的位置了吧。
从文件中读取内容
[root@localhost ~]# xargs -a num.txt
9 8 6 8 4 7 2 1
从文件中读取内容时,指定内容结束符号
[root@localhost ~]# xargs -a num.txt -E 4
9 8 6 8
从文件中读取内容时,询问用户是否显示,y显示,其他不显示
[root@localhost ~]# xargs -a num.txt -p
echo 9 8 6 8 4 7 2 1 ?...y
9 8 6 8 4 7 2 1
[root@localhost ~]# xargs -a num.txt -p
echo 9 8 6 8 4 7 2 1 ?...n
从文件中读取内容时,指定每行显示几个内容
[root@localhost ~]# xargs -a num.txt -n4
9 8 6 8
4 7 2 1
从文件中读取内容时,指定每行显示几个内容,没显示一行询问一下用户
[root@localhost ~]# xargs -a num.txt -n4 -p
echo 9 8 6 8 ?...y
9 8 6 8
echo 4 7 2 1 ?...y
4 7 2 1
默认xargs以空格为分隔符,可以通过-d来自定义分隔符
[root@localhost ~]# echo "ab cd ef g" | xargs
ab cd ef g
[root@localhost ~]# echo "nameXnameXnameXname" | xargs -dX
name name name name
[root@localhost ~]# echo "nameXnameXnameXname" | xargs
nameXnameXnameXname
-I 临时存储内容给一个对象,然后进行后续处理
[root@localhost ~]# xargs -a num.txt -n1 -I {} echo {}--bak
9--bak
8--bak
6--bak
8--bak
4--bak
7--bak
2--bak
1--bak
-I的综合运用,转移文件并改名
[root@localhost ~]# ls *.txt
a.txt b.txt num.txt test1.txt uniq.txt
[root@localhost ~]# ls *.txt | xargs -n1 -I {} cp {} /tmp/{}-bak
[root@localhost ~]# ls /tmp/*-bak
/tmp/a.txt-bak /tmp/num.txt-bak /tmp/uniq.txt-bak
/tmp/b.txt-bak /tmp/test1.txt-bak