awk:连接文件时如何包含文件名?

awk: how to include file names when concatenating files?

在 运行 GNUwin32 下 windows 7.

在一个目录中有很多文件,文件名如下所示:

chem.001.txt
chem.002.b4.txt
chem.003.md6.txt
(more files.txt) ...

在当前格式中,none 个文件包含文件名。

需要清理这些文件以供进一步使用。 想要将所有文件连接成一个文件。 但还需要在连接内容的开头包含文件名,以便稍后将原始文件与干净数据关联起来。

例如,单个串联文件 (new_file.txt) 将如下所示:

chem.001.txt delimiter (could be a tab or pipe) followed by text from chem.001.txt...
chem.002.b4.txt delimiter followed by text from chem.002.b4.txt ...
chem.003.md6.txt delimiter followed by text from chem.003.md6.txt ...
etc. ...

然后将清理串联文件并根据需要解析内容。

awk - gawk 可能有办法将文件名与 ($1) 相关联,将文件中的文本与 ($2) 相关联,然后按顺序打印 ($1, $2) 将每个文件放入 'new_file.txt',但我无法使其工作。

如何操作?

将其放入 foo.awk:

BEGIN{ RS="^$"; ORS=""; OFS="|" }
{ gsub(/\n[\r]?/," "); print FILENAME, [=10=] > "new_file.txt" }

然后执行为

awk -f foo.awk <files>

其中 <files> 是您在 Windows 中提供的文件名列表。它使用 GNU awk 进行多字符 RS,让您将整个文件作为单个记录读取。