我有一个非常大的文件与德国邮政编码/ zipcodes.对于每个代码,我想找到正确的联邦州.我做的是以下.
看起来像这样:
{if ($1 >= 01001 && $1 <=01936)
print "Sachsen" >"PLZ6.txt"}
{if ($1 >= 01941 && $1 <= 01998)
print "Brandenburg" >"PLZ6.txt"}
{if ($1 >= 02601 && $1 <= 02999)
print "Sachsen" >"PLZ6.txt"}
{if ($1 >= 03001 && $1 <= 03253)
print "Brandenburg" >"PLZ6.txt"} #this goes on for another 150 different lines...
Run Code Online (Sandbox Code Playgroud)
所以我认为我只得到一个zipcode的名称(如果它落在条件的范围内).这意味着我的新文件中应该有2267个案例.但是,我的新文件为23k案例.
我想知道,如果邮政编码属于多个范围......你有什么想法,为什么邮政编码可以适应几种情况?我想让每个邮政编码完全匹配一个条件.
由于我不知道整个脚本或整个输入数据,因此很难肯定地说,但我强烈怀疑它与您无意中使用八进制数有关.在awk中,0
以及不包含8
或者9
是八进制数字的文字,也就是说010 == 8
,0100 == 64
等等.有关详细信息,请参阅此处.
当你写作
{if ($1 >= 01001 && $1 <=01936)
Run Code Online (Sandbox Code Playgroud)
那么01001
是一个八进制数,01936
是一个十进制数(至少有GNU awk,因为它包含一个9
),所以你问是否$1 >= 513 && $1 <= 1936
.
我怀疑是你以这种方式构造了重叠范围,并且可以通过从所有条件中删除前导零来解决问题(因为八进制解释不适用于输入数据).
顺便说一下,写起来可能会更加笨拙
$1 >= 1001 && $1 <= 1936 { print "Sachsen" > "PLZ6.txt" }
Run Code Online (Sandbox Code Playgroud)
等等.