我有几个包含文本的.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或类似?谢谢!!!
答案 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
重置每个文件末尾的行号