我一直在尝试让 grep 找到两条线之间的交集:
grep -Fx -f line1.txt line2.txt
输入文件内容:
第1行.txt:
44.5 -125.0
44.0 -124.5
43.0 -124.3
42.0 -124.0
第2行.txt:
43.0 -128.0
43.1 -127.0
43.2 -126.0
43.3 -125.0
43.4 -124.0
43.5 -123.0
43.6 -122.0
43.7 -121.0
问题是这两行没有完全相同的行。
有谁有一个简单的方法来找到交点?
我希望有一个命令为我找到交叉点。 grep 可能不能做到这一点?另外,尝试了 GMT 命令,但也无法使其工作。有什么建议吗?
我会选择一个命令来查找并写入最接近交点的 line2.txt 点:
答案1
Grep 绝对是错误的工具! sed 也好不了多少,因为你需要做一些数学运算。 Perl 是一个候选者,但最重要的是您需要进行线路相交测试。这里有几个链接可以帮助您入门。好在unix是一个很棒的编写程序的平台,因为你需要编写程序。
答案2
我可以猜测你正在考虑这样的事情:
( cat line2.txt; cat line1.txt | sed 's/ */ xxxx /' ) | sort -n | awk '$2 == "xxxx" {f2=$3} $2 != "xxxx" {f1 = $2} {print $1" "f1" "f2}'
输出将是:
42.0 -124.0
43.0 128.0 -124.0
43.0 128.0 -124.3
43.1 127.0 -124.3
43.2 126.0 -124.3
43.3 125.0 -124.3
43.4 124.0 -124.3
43.5 123.0 -124.3
43.6 122.0 -124.3
43.7 121.0 -124.3
44.0 121.0 -124.5
44.5 121.0 -125.0