Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 猛击;如何将多个文件合并为一个文件_Bash_Scripting - Fatal编程技术网

Bash 猛击;如何将多个文件合并为一个文件

Bash 猛击;如何将多个文件合并为一个文件,bash,scripting,Bash,Scripting,我在一个目录中有多个文件,我想使用Bash将每个文件合并成一个文件。输出需要包含文件名,然后列出其内容。例如 $ cat File 1 store $ cat File 2 bank $ cat File 3 car 所需输出位于名为master的单个文件中 $ cat master File 1 store File 2 bank File 3 car 这就行了 for f in File{1..3} ; do echo $f >> master; ca

我在一个目录中有多个文件,我想使用Bash将每个文件合并成一个文件。输出需要包含文件名,然后列出其内容。例如

$ cat File 1
store

$ cat File 2 
bank

$ cat File 3
car
所需输出位于名为master的单个文件中

$ cat master
File 1
store
File 2 
bank
File 3
car
这就行了

for f in File{1..3} ; do
    echo $f >> master;
    cat $f >> master;
done

你所要求的是猫的本意;它是
concatenate
的缩写,因为它将文件的内容连接在一起

但它不会将文件名注入到输出中。如果您希望文件名在那里,最好的选择可能是循环:

for f in "File 1" "File 2" "File 3"; do
    printf '%s\n' "$f"
    cat "$f"
done > master
使用gnu sed

sed -s '1F' *
“-s” “分开” 默认情况下,“SED”将考虑命令上指定的文件。 作为一条连续的长流的线。此GNU“sed”扩展 允许用户将它们视为单独的文件:范围地址 (例如“/abc/,/def/”)不允许跨多个文件,第行 数字相对于每个文件的开头,“$”表示 每个文件的最后一行,以及从“R”命令调用的文件 在每个文件的开始处重绕

“F” 打印出当前输入文件的文件名(带有尾随字符) 新行)


到目前为止你试过吗?你的例子是错误的,你需要在文件名中引用空格,即使是“cat”。输出将不包含该文件names@neuhaus; 我明白了。修复了。我可以用通配符代替键入每个文件的单个名称吗?我分配了更多需要合并的文件,而不仅仅是三个文件。我需要分组的所有文件都在一个目录中。最简单的方法是更改目录,然后对*中的文件使用
;执行
sed -s '1F' *