【问题标题】:Making paste command read from standard input从标准输入读取粘贴命令
【发布时间】:2026-02-12 10:00:01
【问题描述】:
$paste num let
1    a
2    b
3    c
4    d

所以当我这样做时

$ cat num | paste - - 
1    2
3    4

我的问题是为什么“cat num | paste - -”不生成输出为:

1     1
2     2
3     3
4     4

【问题讨论】:

    标签: linux shell paste


    【解决方案1】:

    很明显,paste 从第一个“文件”(标准输入)中读取一行,然后从第二个“文件”(也是标准输入)中读取一行并粘贴它们以创建第一行输出。然后重复。

    paste 的 POSIX 规范明确涵盖了这一点:

    如果为一个或多个文件指定了“-”,则应使用标准输入;对于“-”的每个实例,标准输入应一次读取一行,循环读取。

    【讨论】:

      【解决方案2】:

      你可以使用“paste num num”来生成

      1 1
      2 2
      3 3
      4 4
      

      【讨论】:

      • 虽然是这样,但这并不能完全回答这个问题,是吗?
      • 对不起,我误解了这个问题。
      【解决方案3】:
      t1=$(cat 1.txt)
      t2=$(cat 2.txt)
      echo "$t1"  | paste - <(echo "$t2")
      

      GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)

      :)

      【讨论】: