我有两个文本文件,我想以矩阵形式阅读。矩阵A(或文本文件A)是制表符分隔的,包含纬度列,经度列和名称列(以及其他内容)。矩阵B(或文本文件B)是制表符分隔的,包含纬度列和经度列(以及其他内容)。我想阅读其中的每一个,为列指定名称,循环通过A的纬度查找B中的匹配,如果有匹配,则比较经度,如果有匹配,写一个新矩阵C(文本文件C)具有lat,long和name(以及列中的其他信息)。我甚至不知道如何阅读这些内容并为列值指定名称。这可能吗?
答案 0 :(得分:1)
如果你想要一个纯粹的Bash解决方案,那么沿着这些方向可以做到这一点:
file_a=A
file_b=B
file_c=C
while read -r lat_a long_a name_a acol ; do
while read -r lat_b long_b bcol ; do
if [[ $lat_a == "$lat_b" && $long_a == "$long_b" ]] ; then
printf '%s\t%s\t%s\t%s\t%s\n' \
"$lat_a" "$long_a" "$name_a" "$acol" "$bcol"
fi
done <"$file_b"
done <"$file_a" >"$file_c"
假设每个文件中有一个额外的列(第一个文件中为acol
,第二个文件中为bcol
)。它需要适应处理任何真正的列。
Bash代码为它读取的第一个文件的每一行重新读取整个第二个文件,因此如果文件很大,它将非常慢。
更好的选择可能是使用join
命令。有关示例,请参阅Bash join command(但请注意标题具有误导性:join
是一个不依赖于Bash的独立程序。)