我想将多个名为 lab_X.txt 的文件附加到一个输出文件 final.txt。知道一个文件夹中的所有文件都是我需要的文件,我将它们移动到当前目录中并使用cat *.txt > final.txt
,知道>
覆盖文件。我想在文件之间插入一条类似于=============
的简单消息,这可能吗?
假设你有 Gnu awk:
awk 'BEGINFILE{print "============="}1' lab*.txt > final.txt
BEGINFILE
特殊模式(gawk 扩展名(在每个文件的第一行之前触发。它定义变量FILENAME
以防您希望在分隔符行中包含名称。
最后的1
是一种始终正确的模式。由于它没有操作,因此将执行默认操作,这将打印该行。
这也将在开头打印该行。如果你真的不想这样,你可以添加一个检查:
awk 'BEGINFILE{if(nfiles++)print "============="}1' lab*.txt > final.txt
nfiles
没有什么特别的.像任何其他 awk 变量一样,它有效地初始化为 0,后缀++
递增它,但仅在返回其值之后。
with gnu sed
sed -ns '1s/.*/=============n&/;w final.txt' lab*.txt
'-s' '--separ'
默认情况下,'sed' 将考虑命令中指定的文件 线作为单个连续的长流。 这个 GNU 'sed' 扩展 允许用户将它们视为单独的文件:范围地址 (如'/abc/,/def/'(不允许跨越多个文件,行 数字相对于每个文件的开头,"$"表示 每个文件的最后一行,从"R"命令调用的文件是 在每个文件的开头倒带。