Bash将columned文件合并到一个包含行的文件中

时间:2012-07-31 15:47:27

标签: excel 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个条目。这只是例子。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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 :(得分:2)

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

paste -s data_files*