1.xargs 将单行输入转换为多行输出:
amosli@amosli-pc:~/learn$ cat example.txt | xargs -n 2
1 2
3 4
5 6
7 8
1.1 xargs 空格是默认的定界符,-n 表示每行显示几个参数
还可以使用-d参数来分隔参数,如下:
amosli@amosli-pc:~/learn$ echo "splitXhiXamosliXsplit" | xargs -d "X" -n 1
split
hi
amosli
split
1.2.你能快速重命名
$ ls | xargs -t -i mv {} {}.bak
1.3 把pts/1 kill
# ps aux | grep @pts/1 | grep -v grep | awk '{print $2}' | xargs kill -9
2.paste 把两个文件内容合并分裂输入
$cat t
1
2
3
$ cat t.1
a
b
c
2.1横向追加
paste -d"\t" t t.1
1a
2b
3c
2.2使用-d 以*作为分隔符
paste -d '*' t t.1
1*a
2*b
3*c
2.3. -s 就是以每个文件为一个处理单元
paste -s -d "\t" t t.1
123
abc
-s就是以每个文件为一个处理单元,将其中的所有行以-d设定的间隔符相连接组成一大行,输出到标准输出中。
2.4 这样就交替用 ! 和 @ 作为栏分隔符
paste -d "\@\!" name t t.1
dg@1!a
gd@2!b
ly@3!c
2.5.这样就在 4 个栏中列出当前目录
ls | paste - - - -
等同于
ls | paste -d"\t\t\t\n" -s -
3.追加固定文内容
a=1
sed "s/.*/& ${a}/" t
1 1
2 1
3 1
4.切分
$ cat test
1
2
3
4
5.每两行存为一个新文件
#split -l 2 test cf
切分test文件,被切分后的文件名cf开头
$ cat cfaa
1
2
$ cat cfab
3
4
6.平均分割列
cat test
1
2
3
a
a
a
b
b
b
cat test | xargs -n3 |awk '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i,j] " ";print ""}}'
1 a b
2 a b
3 a b
7.实际应用
cat total.txt | xargs -n31 |awk '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i,j] " ";print ""}}'
转载于:https://blog.51cto.com/dg123/1344853