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

时间:2015-11-02 13:37:46

标签: 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或类似?谢谢!!!

3 个答案:

答案 0 :(得分:2)

您可以使用以下命令:

awk 'FNR==1{print FILENAME}1' *.seq

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

尾随1是一个awk成语。它总是计算为true,这使得awk打印所有输入行。

注意:

只要该文件夹中没有空文件,上述解决方案才有效。检查Ed Morton's great answer指出这一点。

答案 1 :(得分:2)

如果可以有空文件,则需要:

使用GNU awk:

awk 'BEGINFILE{print FILENAME}1' *.seq

与其他awks(未经测试):

awk '
FNR==1 {
    for (++ARGIND;ARGV[ARGIND]!=FILENAME;ARGIND++) {
        print ARGV[ARGIND]
    }
    print FILENAME
}
{ print }
END {
    for (++ARGIND;ARGIND in ARGV;ARGIND++) {
        print ARGV[ARGIND]
    }
}' *.seq

答案 2 :(得分:0)

perl -lpe 'print $ARGV if $. == 1; close(ARGV) if eof' *.seq

$.是行号
$ARGV是当前文件的名称
close(ARGV) if eof重置每个文件末尾的行号