Bash将柱状文件合并到一个带有行的文件中

我有这种格式的许多数据文件:

-1597.5421 -1909.6982 -1991.8743 -2033.5744 

但我想将它们合并成一个数据文件,每个原始数据文件占用一行空格,所以我可以在Excel中导入它。

 -1597.5421 -1909.6982 -1991.8743 -2033.5744 -1789.3324 -1234.5678 -9876.5433 -9999.4321 

等等。 每个文件都命名为ALL.ene ,我的工作目录中的每个目录都包含它。 有人可以给我一个快速解决? 谢谢!

:编辑。 每个文件有11个条目。 那些只是例子。

 for i in */ALL.ene do echo $(<$i) done > result.txt 

假设:

我假设你所有的数据文件都是这种格式的:

 <something1><newline> <something2><newline> <something3><newline> 

因此,例如,如果最后一个换行符不存在,以下脚本将会忽略<something3>对应的字段。

用法: ./merge.bash -o <output file> <input file list or glob>

该脚本附加到以前运行的任何现有输出文件。 它也不会假设每个input文件有多less个数据字段。 它盲目地把每一行放在由空格分隔的输出文件中。

 #!/bin/bash # set -o xtrace # uncomment to debug declare output [[ $1 =~ -o$ ]] && output="$2" && shift 2 || { \ echo "The first argument should always be -o <output>"; exit -1; } declare -a files=("${@}") row for file in "${files[@]}"; do while read data; do row+=("$data") done < "$file" echo "${row[@]}" >> "$output" row=() done 

例:

 $ cat data1 -1597.5421 -1909.6982 -1991.8743 -2033.5744 $ cat data2 -1789.3324 -1234.5678 -9876.5433 -9999.4321 $ ./merge.bash -o test data{1,2} $ cat test -1597.5421 -1909.6982 -1991.8743 -2033.5744 -1789.3324 -1234.5678 -9876.5433 -9999.4321 

这是coreutils paste的擅长的,试试:

 paste -s data_files*