2012-07-31 88 views
0

我有这种格式的许多数据文件:猛砸合并圆柱文件合并成一个文件,行

-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个条目。那些只是例子。

回答

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

谢谢,非常完美! – 2012-07-31 16:03:36

2

假设:

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

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

因此,举例来说,如果最后一个换行符丢失,下面的脚本将错过字段对应于<something3>

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

脚本追加到上一次运行的任何现有的输出文件。它也不会假定每个输入文件有多少个数据字段。它盲目地将每一行放入由空格分隔的输出文件中的一行中。

#!/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 
2

这是coreutilspaste擅长,尝试:

paste -s data_files*