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 ""}}'