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

时间:2015-02-08 16:58:02

标签: regex awk gawk

在Windows 7下运行GNUwin32

在一个目录中包含许多文件,文件名如下所示:

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

在目前的形式中,没有文件包含文件名。

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

例如,单个连接文件(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'但我无法使其正常工作。

怎么做?

1 个答案:

答案 0 :(得分:2)

把它放在foo.awk:

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

然后将其作为

执行
awk -f foo.awk <files>

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