我有一个包含以下内容的文本文件:
Location 1 40.733596 -74.003139
Location 2 43.758102 -73.975734
Location 3 41.732456 -74.003755
Location 4 42.345907 -71.087001
其中第一列只是位置计数,第二列表示纬度,第三列表示经度。
我试图写一个awk命令,只打印出特定纬度和经度范围内的位置。
awk -F '\t' '$2>40,$2<=42,$3>=-71,$3<=74 {print $1,$2,$3}'LatLon.txt
在awk命令的模式段中我试图指定第2列和第3列的范围,它提示bash只打印40-42 lat和-71到-74 lon范围内的位置。
我收到错误提及:
awk: bailing out at source line 1
由于我的awk行的模式段。我如何正确指定范围?
答案 0 :(得分:0)
您的代码:
awk -F '\t' '$2>40,$2<=42,$3>=-71,$3<=74 {print $1,$2,$3}'LatLon.txt
这有一些错误:
&&
结合使用,而不是逗号$3
的测试在更正后不会通过,因为您要求的值介于-71到74之间,但所有给定的值都低于-71 此代码适用于您:
awk -F '\t' '(40 < $2 && $2 <= 42) && (-74 <= $3 && $3 <= -71)' LatLon.txt
你可能会注意到这里没有动作。默认操作是按原样打印行,因此这与您给出的操作大致相当(尽管{print $1,$2,$3}
使用OFS
重新连接这些字段,默认为空格而不是制表符;您可以OFS="\t"; print $1,$2,$3
保留该print $0
或仅保留pyplot
,这是默认情况下没有操作的情况。)
括号在技术上是不必要的。提供易读性。