2012-07-31 75 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*