Bash 多if条件AWK
我有一个很大的德国邮政编码文件。对于每个代码,我想找到正确的联邦州。我所做的如下Bash 多if条件AWK,bash,if-statement,awk,Bash,If Statement,Awk,我有一个很大的德国邮政编码文件。对于每个代码,我想找到正确的联邦州。我所做的如下 我在一个新文件中打印了Zipcode 我把它们整理好,扔掉了两个箱子。 现在我有了一个包含2267个不同Zipcode的新文件 我创建了一个awk命令,它应该为每个代码找到一个名称 看起来像这样: {if ($1 >= 01001 && $1 <=01936) print "Sachsen" >"PLZ6.txt"} {if ($1 >= 01941 &&
{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...
{if($1>=01001&&$1“PLZ6.txt”}
{如果($1>=01941&&$1“PLZ6.txt”}
{如果($1>=02601&&$1“PLZ6.txt”}
{如果($1>=03001&&$1“PLZ6.txt”}#这将继续用于另外150个不同的行。。。
因此,我认为我的一个zipcode(如果它在条件范围内的话)只有一个名称。这意味着我的新文件中应该有2267个案例。然而,我的新文件是23k案例
我想知道,如果邮政编码分为多个范围……你知道吗,为什么zipcode可以符合几个条件?我想让每个zipcode恰好匹配一个条件。很难确定,因为我不知道整个脚本或整个输入数据,但我强烈怀疑它与你的u八进制数的常规用法。在awk中,以
0
开头且不包含8
或9
的文字是八进制数,也就是说010==8
,0100==64
等。有关详细信息,请参阅
当你写作时
{if ($1 >= 01001 && $1 <=01936)
等等。很难确定,因为我不知道整个脚本或整个输入数据,但我强烈怀疑这与您无意中使用八进制数有关。在awk中,以
0
开头且不包含8
或9
的文字是八进制数,也就是说010==8
,0100==64
等。有关详细信息,请参阅
当你写作时
{if ($1 >= 01001 && $1 <=01936)
依此类推。如果我是对的,包含postalcode的文件应该如下所示:
01001 City-Name Sachsen
01936 City-Name Sachsen
02601 City-Name Sachsen
02602 City-Name Sachsen
02603 City-Name Sachsen
02604 City-Name Sachsen
02999 City-Name Sachsen
01941 City-Name Brandenburg
01942 City-Name Brandenburg
01943 City-Name Brandenburg
01944 City-Name Brandenburg
01945 City-Name Brandenburg
01998 City-Name Brandenburg
03001 City-Name Brandenburg
03253 City-Name Brandenburg
这里将城市名称
替换为邮政编码的实际城市名称
$ awk '/01945/ {print $3}' postalcodes.txt
Brandenburg
这应该会给你联邦政府。这解决了你的问题吗?如果我是对的,包含postalcode的文件应该如下所示:
01001 City-Name Sachsen
01936 City-Name Sachsen
02601 City-Name Sachsen
02602 City-Name Sachsen
02603 City-Name Sachsen
02604 City-Name Sachsen
02999 City-Name Sachsen
01941 City-Name Brandenburg
01942 City-Name Brandenburg
01943 City-Name Brandenburg
01944 City-Name Brandenburg
01945 City-Name Brandenburg
01998 City-Name Brandenburg
03001 City-Name Brandenburg
03253 City-Name Brandenburg
这里将城市名称
替换为邮政编码的实际城市名称
$ awk '/01945/ {print $3}' postalcodes.txt
Brandenburg
这应该给你一个联邦政府。这解决了你的问题吗?@Wintermute可能是正确的,请回答八进制猜测。如果是这样,接受他的答案,但无论如何,请将代码改写为:
function m(beg,end,state) {
if ( ($1 >= beg) && ($1 <= end) ) {
if ($1 in states) {
printf "Warning: State for zip \"%s\" being changed from \"%s\" to \"%s\".\n", $1, states[$1], state| "cat>&2"
}
states[$1] = state
print state > "PLZ6.txt"
}
}
{
m(1001,1936,"Sachsen")
m(1941,1998,"Brandenburg")
m(2601,2999,"Sachsen")
m(3001,3253,"Brandenburg")
}
@Wintermute的八进制猜测可能是正确的。如果是,请接受他的答案,但无论如何,请将代码改写为:
function m(beg,end,state) {
if ( ($1 >= beg) && ($1 <= end) ) {
if ($1 in states) {
printf "Warning: State for zip \"%s\" being changed from \"%s\" to \"%s\".\n", $1, states[$1], state| "cat>&2"
}
states[$1] = state
print state > "PLZ6.txt"
}
}
{
m(1001,1936,"Sachsen")
m(1941,1998,"Brandenburg")
m(2601,2999,"Sachsen")
m(3001,3253,"Brandenburg")
}
您好,欢迎来到StackOverflow。这里是大多数用户可能会同意该网站的工作方式:您不需要事先打招呼或感谢,避免使用这些词语会使您的问题更容易扫描,以便正确的人能够回答(而且,几个月后,当其他人遇到同样的问题并阅读您的问题时,这些词语也没有意义)。如果你的问题是关于主题的,你不必为此道歉。如果不是关于主题的,社区会让你知道。您好,欢迎来到StackOverflow。以下是大多数用户可能会同意该网站的工作方式:你不必事先打招呼或感谢,避免使用这些词会使你的问题更易于扫描,以便浏览ht人可以回答它(而且,几个月后,当其他人有同样的问题并阅读你的问题时,他们也没有意义)。如果你的问题是关于主题的,你不需要为提问道歉。如果不是关于主题的,社区会让你知道。那人真的做到了!谢谢你!那人真的做到了!谢谢你!