0

私はこの形式の多くのデータファイルを持っています:

-1597.5421
-1909.6982
-1991.8743
-2033.5744

しかし、それらすべてを1つのデータファイルにマージし、各元のデータファイルが1行を占め、間にスペースを入れて、Excelでインポートできるようにします。

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

等々。各ファイルには名前が付けられALL.eneており、作業ディレクトリ内のすべてのディレクトリにそのファイルが含まれています。誰かが私に簡単な修正を与えることができますか?ありがとう!

:編集。各ファイルには11個のエントリがあります。それらは単なる例です。

4

3 に答える 3

4
for i in */ALL.ene
do
echo $(<$i)
done > result.txt
于 2012-07-31T15:54:40.310 に答える
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
于 2012-07-31T16:17:09.810 に答える
2

これがcoreutils paste得意なことです。試してみてください。

paste -s data_files*
于 2012-07-31T16:29:49.920 に答える