来自男性:paste
写入由每个给定文件的顺序对应行组成的标准输出行,由TAB字符分隔。标准输入用于文件名为"-"或未给定输入文件的情况。
如果我的理解是正确的(当paste
不是从标准输入中输入时,这似乎是适用的),这意味着,例如,命令paste file1 file2
将输出许多行,其中第n行由file1
的第n行组成,后跟TAB,然后是file2
的第n行。
然而,如果我们用-
来替换每个文件,表示标准输入,那么输出的每一行都将由两个连续的标准输入行组成,用TAB分隔,而不是同一行重复两次,这是为什么呢?
例如,给定文件foo.txt
:
1
2
3
4
运行命令paste foo.txt foo.txt
将得到以下输出:
但是运行paste - - < foo.txt
会导致:
我认为paste - - < foo.txt
* 只"打开"* 文件一次,而paste foo.txt foo.txt
打开同一文件的两个示例,因此使用了两个"* 游标 *",但我不确定这是否正确,或者这是否是发生这种情况的原因。
1条答案
按热度按时间wfveoks01#
因此使用了两个“游标”,但我不确定这是否正确
这是千真万确的。
用更专业的术语来说,打开文件会创建一个file descriptor。文件描述符有一个关联的文件位置指示符(光标)“便于有序地前进通过文件”。
paste - -
使paste
从相同的标准输入文件描述符读取两次,从而将相同的文件位置指示符递增两次。当paste foo.txt foo.txt
使粘贴打开引用相同文件的两个文件描述符时,但是两个文件描述符具有单独的文件位置指示符。