我需要迭代对象列表以获取所有可能的配对组合。我找到了以下脚本,它使用 Bash 中的列表工作。
set -- value1 value2 "value with spaces"
for a; do
shift
for b; do
printf "%s - %s\n" "$a" "$b"
done
done
我想修改它,不是从 bash 列表开始,而是从文件(txt
到csv
)开始,其中第一列是要合并的对象的名称,第二列是其他信息(我也想在输出中包含这些信息)。
输入文件:
ID,pKi
4a,10
4b,20
4c,30
预期输出文件:
ID1,ID2,pKi1,pKi2
4a,4b,10,20
4a,4c,10,30
4b,4c,20,30
答案1
将两个文件读入数组并使用相同的技术
mapfile -t lines < input.file
last_index=$(( ${#lines[@]} - 1))
echo "ID1,ID2,pKi1,pKi2"
for ((i = 1; i < last_index; i++)); do
for ((j = i+1; j <= last_index; j++)); do
printf '%s,%s\n' "${lines[i]}" "${lines[j]}"
done
done \
| awk -F, -vOFS=, '{print $1,$3,$2,$4}' # rearrange the fields
@Tommaso 报告:
该脚本有效,但我的输出是这样的:
4a,4b,6.93 ,7.29 4a,4c,6.93 ,8.4 4a,4d,6.93 ,7.67
为什么最后一个变量 (pki2) 会换行?谢谢。