Awk 使用其他文件的名称和内容创建新的文本文件

Awk 使用其他文件的名称和内容创建新的文本文件,awk,Awk,我有几个包含文本的.seq文件。 我想获得一个包含以下内容的文本文件: name_of_the_seq_file1 contents of file 1 name_of_the_seq_file2 contents of file 1 name_of_the_seq_file3 contents of file 3 所有文件都在同一目录中。 有可能使用awk或类似产品??谢谢 您可以使用以下命令: awk 'FNR==1{print FILENAME}1' *.seq FNR是当前输入文件

我有几个包含文本的.seq文件。 我想获得一个包含以下内容的文本文件:

name_of_the_seq_file1
contents of file 1
name_of_the_seq_file2
contents of file 1
name_of_the_seq_file3
contents of file 3

所有文件都在同一目录中。
有可能使用awk或类似产品??谢谢

您可以使用以下命令:

awk 'FNR==1{print FILENAME}1' *.seq
FNR
是当前输入文件的记录编号(默认为行号)。每次awk开始处理另一个文件
FNR==1
,在这种情况下,当前文件名通过
{print filename}
打印出来

尾随的
1
是一种awk习惯用法。它的计算结果总是true,这使得
awk
打印所有输入行

注意:


上述解决方案仅在该文件夹中没有空文件时有效。检查哪些点指出了这一点。

您可以使用以下命令:

awk 'FNR==1{print FILENAME}1' *.seq
FNR
是当前输入文件的记录编号(默认为行号)。每次awk开始处理另一个文件
FNR==1
,在这种情况下,当前文件名通过
{print filename}
打印出来

尾随的
1
是一种awk习惯用法。它的计算结果总是true,这使得
awk
打印所有输入行

注意:


上述解决方案仅在该文件夹中没有空文件时有效。检查哪一点指出了这一点。

如果可能存在空文件,则您需要:

使用GNU awk:

awk 'BEGINFILE{print FILENAME}1' *.seq
对于其他AWK(未经测试):


如果可能存在空文件,则您需要:

使用GNU awk:

awk 'BEGINFILE{print FILENAME}1' *.seq
对于其他AWK(未经测试):


perl-lpe'print$ARGV if$。==1.如果eof'*.seq

$。
是行号
$ARGV
是当前文件的名称

close(ARGV)if eof
重置每个文件末尾的行号

perl-lpe'print$ARGV if$。==1.如果eof'*.seq

$。
是行号
$ARGV
是当前文件的名称

close(ARGV)如果eof
重置每个文件末尾的行号

使用AWK很难缩短和提高效率。请注意,如果文件为空,则会失败。对于OP:这可能吗?如果可能的话,最好使用GNU awks BEGINFLE而不是FNR==1。@Manu Górriz Uh!我原以为你会得到埃德蒙的回答。它总是正确的,只有在文件夹中没有空文件的情况下,我的才会正确。使用AWK很难缩短和提高效率。请注意,如果有空文件,它将失败。对于OP:这可能吗?如果可能的话,最好使用GNU awks BEGINFLE而不是FNR==1。@Manu Górriz Uh!我原以为你会得到埃德蒙的回答。它总是正确的,只有在该文件夹中没有空文件时才正确