如何将文件名作为前缀添加到文本文件的每一行?(批处理;子目录)

如何将文件名作为前缀添加到文本文件的每一行?(批处理;子目录)

我有许多 .txt 文件,它们的文件名是不同的日期:

01.01.2010.txt
02.01.2010.txt
...

当前每个文件(例如:01.01.2010.txt)如下所示:

  0.351  XXX  XXX  XXX  XXX
  0.292  XXX  XXX  XXX  XXX  

如何将文件名添加到文件的每一行并保持格式?

...对于文件 01.01.2010.txt 来说,它看起来像这样:

  01.01.2010  0.341  XXX  XXX  XXX  XXX
  01.01.2010  0.122  XXX  XXX  XXX  XXX  

.. 对于文件 02.01.2010.txt 来说如下所示:

  02.01.2010  0.391  XXX  XXX  XXX  XXX
  02.01.2010  1.342  XXX  XXX  XXX  XXX  

这些文件存储在子目录中。如果有一行代码可以处理所有这些文件以及子目录,那就太棒了。

- /patch/to/file
 -/path/to/file/sub1/
 -/path/to/file/sub2/
 -/path/to/file/sub3/

答案1

建议使用bash循环和sed。例如:

创建测试文件集:

$ for i in $(seq -w 1 10); do echo $i-content > $i.txt; done

组装替换命令:

$ for i in *.txt; do sed -i.bak s/^/$(basename $i .txt)\ /g $i; done

结合find

for i in $(find /your/source/directory/ -iname "*.txt" -print)
do sed -i.bak s/^/$(basename $i .txt)\ /g $i; done

这并未针对性能进行优化,因此可能不是完成请求任务的最有效方法。

答案2

您可以使用:

grep -r . .

第一个.是匹配任意字符的 RegExp 模式。它将匹配所有行。

第二个.是当前文件夹,但您可以将其替换为任何有效路径。例如:

grep -r . /etc/

相关内容