使用tail命令创建文件

使用tail命令创建文件

这就是我使用命令所做的tail。当我尝试将文件输出到屏幕时,文件为空。

~]$ tail > AFS2F1
PASSES ALL DATA FROM INPUT TO OUTPUT
PASSES ONLY SPECIFIED COLUMNS
PASSES NUMBER OF SPECIFIED LINES AT BEGINNING
COMBINES COLUMNS
ARRANGES DATA IN SEQUENCE
PASSES NUMBER OF SPECIFIED LINES AT THE END OF DATA
TRANSLATES ONE OR MORE CHARACTERS
DELETES DUPLICATE LINES
COUNTS CHARACTERS, WORDS, OR LINES
ABCDEFGHIJKLMNOPQRSTUVWXYZ

我使用 tail 命令的方式有什么问题吗?

答案1

tail只会输出最后 10 行。因此,无论怎样,您必须告诉它您已完成输入,以便它知道要输出哪些行(最后 10 行)。

如果您按下CTRL-C(大多数系统上的默认intr字符),则会向其发送 SIGINT 信号,从而杀死它。因为当你杀死它时它还没有看到输入结束,所以它还没有机会写任何东西,所以它会在没有输出任何东西的情况下死亡。

终端表示输入结束的方式(当终端处于典范模式)是在空行上输入eof字符(大多数系统上默认)。Ctrl-D

然后tail将检测是否已到达输入末尾,并输出收到的最后 10 行。

答案2

是的,您应该向 提供输入tail,因此:

tail file > newfile

如果你想使用 STDIN :

cat file | tail > newfile

或者

 head > new_file < file

或者

tail > AFS2F1<<EOF
PASSES ALL DATA FROM INPUT TO OUTPUT
PASSES ONLY SPECIFIED COLUMNS
PASSES NUMBER OF SPECIFIED LINES AT BEGINNING
COMBINES COLUMNS
ARRANGES DATA IN SEQUENCE
PASSES NUMBER OF SPECIFIED LINES AT THE END OF DATA
TRANSLATES ONE OR MORE CHARACTERS
DELETES DUPLICATE LINES
COUNTS CHARACTERS, WORDS, OR LINES
ABCDEFGHIJKLMNOPQRSTUVWXYZ
EOF

答案3

问题是tail程序会缓冲其输入文件,直到获得条件为止eof,然后打印出最后几行(默认情况下为 10 行)。最有可能的是你用ctrl-c终止它的组合来中断它,因此尾部没有机会打印出收集到的行。如果您使用ctrl-d相反的方式,那么您可以有效地将end-of-file字符发送到尾部的输入流,因此它将打印出收集的行。

相关内容