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*