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,让您将整个文件作为单个记录读取。
在 运行 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,让您将整个文件作为单个记录读取。