将多个文件合并为一个包括文件名

Combine multiple files into one including the file name

我一直在四处寻找,试图将多个文本文件组合成包含文件名的文件。

我当前的文件内容是:

1111,2222,3333,4444

我追求的是:

File1,1111,2222,3333,4444
File1,1111,2222,3333,4445
File1,1111,2222,3333,4446
File1,1111,2222,3333,4447
File2,1111,2222,3333,114444
File2,1111,2222,3333,114445
File2,1111,2222,3333,114446

我找到了多个如何组合它们的示例,但没有找到任何组合它们的例子,包括文件名。

假设您的所有文件都具有 .txt 扩展名并且仅包含示例中的一行,您可以使用以下代码:

for f in *.txt; do echo "$f,$(cat "$f")"; done > output.log

其中 output.log 是输出文件。

能否请您尝试以下。考虑到您的 Input_file 扩展名是 .csv.

awk 'BEGIN{OFS=","} {print FILENAME,[=10=]}' *.csv > output_file

在看到 OP 的评论后如果文件扩展名是 .txt 然后尝试:

awk 'BEGIN{OFS=","} {print FILENAME,[=11=]}' *.txt > output_file

嗯,它有效:

printf "%s\n" *.txt |
xargs -n1 -d $'\n' bash -c 'xargs -n1 -d $'\''\n'\'' printf "%s,%s\n" "" <""' --
  1. 首先输出一个换行符分隔的文件列表。
  2. 然后对每个文件xargs执行sh
    1. 在sh里面对文件的每一行执行xargs
      1. 并为每行输入
      2. 执行printf "%s,%s\n" <filename>

测试于 repl

使用 grep "" *.txt -I > $filename 解决。