使用 shell 脚本合并两个文件
Merge two files using shell scripting
我有两个文件,文件 A 和文件 B。我想合并这两个文件,如下所示。
文件A
Data A
a 123
b 35
-------
Data B
-------
Data C
a 234
d 23
文件 B
Data A
a 12
c 1
-------
Data B
-------
Data C
d 24
输出应该是
Data A
a 135
b 35
c 1
-------
Data B
-------
Data C
a 234
d 47
Data A,Data ... 对于文件和 Data A 下的变量的顺序相同,Data ... 也将按字母顺序对两个文件进行排序,但某些变量可能在一个文件中文件或可能不会。
我尝试将每个块的两个文件外连接(分隔符为 ----),然后将这两个数字相加,但我想不出任何方法来做到这一点。
可能应该用某种真正的编程语言完成,但您要求 bash 所以这里是:
#!/bin/bash
declare -A data
read_sect_from_fd() {
local fd=
while read -u $fd -r var val; do
[[ $var == ------- ]] && break
if [ "${data[$var]}" ]; then
data[$var]=$(( $val + ${data[$var]} ))
else
data[$var]=$val
fi
done <&3
}
print_sect() {
for i in "${!data[@]}"; do
echo "$i ${data[$i]}"
done
}
exec 3<"File A"
exec 4<"File B"
while IFS= read -u 3 -r heading ; do
read_sect_from_fd 3
IFS= read -u 4 -r heading
read_sect_from_fd 4
[ "$not_first" ] && echo "-------"
not_first=1
echo "$heading"
print_sect
data=()
done
我有两个文件,文件 A 和文件 B。我想合并这两个文件,如下所示。
文件A
Data A
a 123
b 35
-------
Data B
-------
Data C
a 234
d 23
文件 B
Data A
a 12
c 1
-------
Data B
-------
Data C
d 24
输出应该是
Data A
a 135
b 35
c 1
-------
Data B
-------
Data C
a 234
d 47
Data A,Data ... 对于文件和 Data A 下的变量的顺序相同,Data ... 也将按字母顺序对两个文件进行排序,但某些变量可能在一个文件中文件或可能不会。
我尝试将每个块的两个文件外连接(分隔符为 ----),然后将这两个数字相加,但我想不出任何方法来做到这一点。
可能应该用某种真正的编程语言完成,但您要求 bash 所以这里是:
#!/bin/bash
declare -A data
read_sect_from_fd() {
local fd=
while read -u $fd -r var val; do
[[ $var == ------- ]] && break
if [ "${data[$var]}" ]; then
data[$var]=$(( $val + ${data[$var]} ))
else
data[$var]=$val
fi
done <&3
}
print_sect() {
for i in "${!data[@]}"; do
echo "$i ${data[$i]}"
done
}
exec 3<"File A"
exec 4<"File B"
while IFS= read -u 3 -r heading ; do
read_sect_from_fd 3
IFS= read -u 4 -r heading
read_sect_from_fd 4
[ "$not_first" ] && echo "-------"
not_first=1
echo "$heading"
print_sect
data=()
done