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

时间:2019-11-26 11:57:34

标签: bash shell awk cat

我一直在尝试将多个文本文件合并为文件名。

我当前的文件内容是:

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

我发现了多个示例,说明如何将它们全部合并,但没有任何方法可以合并它们,包括文件名。

4 个答案:

答案 0 :(得分:3)

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

awk 'BEGIN{OFS=","} {print FILENAME,$0}' *.csv > output_file

在看到OP的注释后,如果文件扩展名是.txt,请尝试:

awk 'BEGIN{OFS=","} {print FILENAME,$0}' *.txt > output_file

答案 1 :(得分:1)

假设您的所有文件都具有# ID col1 #1 1 101 #2 1 102 #3 3 104 #4 4 101 扩展名,并且仅包含一行(如示例中所示),则可以使用以下代码:

.txt

其中for f in *.txt; do echo "$f,$(cat "$f")"; done > output.log 是输出文件。

答案 2 :(得分:0)

好吧,它起作用:

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

repl中进行了测试。

答案 3 :(得分:0)

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