go-die-ing

郁闷的时刻

今天发现世界上有种死法叫做被自己傻死,正在dieing。知道的东西太少了也是一种罪过!啊!!!!

之前为了将一个文件并行的写入另一个文件想了好多方法,最终呢是一个同事写了很长的脚本,用了许多高级的awk语法才搞定,但是今天呢,看见了一个命令,就是这个命令啊,差点没把我气死。一个命令搞定全部工作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--- ~/Desktop » cat 1.py 
1
2
3
4
5
--- ~/Desktop » cat 2.py
6
7
8
9
10
--- ~/Desktop » paste 1.py 2.py
1 6
2 7
3 8
4 9
5 10

原来一切如此简单!linux上的工具还真是好用啊。下面说说几个参数

1
2
3
-d, --delimiters=LIST   reuse characters from LIST instead of TABs
-s, --serial paste one file at a time instead of in parallel
-z, --zero-terminated line delimiter is NUL, not newline
  1. -d指定delimiter,默认为tab

    • 使用\n实现交叉合并

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      --- ~/Desktop » paste 1.py 2.py -d'\n'
      1
      6
      2
      7
      3
      8
      4
      9
      5
      10
    • 指定其它delimiter,不过这个delimiter只能有一个可惜

      1
      2
      3
      4
      5
      6
      --- ~/Desktop » paste 1.py 2.py -d '-'
      1-6
      2-7
      3-8
      4-9
      5-10

      如果要用长一些的delimiter那么使用awk

      1
      2
      3
      4
      5
      6
      --- ~/Desktop » paste *py | awk '{print $1"---->"$2"<----"$3}' 
      1---->6<----11
      2---->7<----12
      3---->8<----13
      4---->9<----14
      5---->10<----15
  2. -s将列转为行,比使用xargs -n好多了,因为xargs毕竟需要指定列数,具有不可靠性,而这个才是专业的

    1
    2
    3
    4
    5
    --- ~/Desktop » paste 1.py 2.py -s    
    1 2 3 4 5
    6 7 8 9 10
    --- ~/Desktop » paste 1.py -s
    1 2 3 4 5
  3. -z这个参数的作用我暂时还没体会到,恕我愚蠢

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    --- ~/Desktop » paste 1.py 2.py 3.py -z
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
  4. 结合使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    --- ~/Desktop » paste 1.py 2.py 3.py -d '\n' -s
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    效果类似于

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    --- ~/Desktop » cat 1.py 2.py 3.py| xargs -n 1 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    --- ~/Desktop » cat *.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15