我有两列文件。第一列是字符串,第二列是正数。如果第一个字段(字符串)在文件中没有双重(因此,第一个字段对于文件是唯一的),我想将该唯一行复制到(让我们说)result.txt。如果第一个字段在文件中有重复,那么我想在这些重复行中减去第二个字段(数字)。顺便说一句,文件将有一个重复的最大值,不超过该值。我想在result.txt中保存它。因此,输出文件将包含具有第一个字段和行的唯一值的所有行,其中第一个字段是重复的名称,第二个字段是从这些重复项中减去的值。文件未排序。这是一个例子:
输入文件:
hello 7
something 8
hey 9
hello 8
something 12
nathanforyou 23
我需要的输出文件(result.txt):
hello 1
something 4
hey 9
nathanforyou 23
我在结尾文件中不能有负数,所以我必须从较大的数字中减去较小的数字。到目前为止我尝试了什么?各种排序(我弄清楚如何找到非重复的行并将它们放在单独的文件中,但是在重复的减法中窒息),awk中的数组(我保存了数组中的所有行,并且"用于"条款...问题是我不知道如何从数组元素中得到第二个字段(行)等。顺便说一句,问题比我描述的更复杂(我有四个字段,前两个是相同的等等),但最后 - 它就是这个。
答案 0 :(得分:1)
$ cat tst.awk
{ val[$1,++cnt[$1]] = $2 }
END {
for (name in cnt) {
if ( cnt[name] == 1 ) {
print name, val[name,1]
}
else {
val1 = val[name,1]
val2 = val[name,2]
print name, (val1 > val2 ? val1 - val2 : val2 - val1)
}
}
}
$ awk -f tst.awk file
hey 9
hello 1
nathanforyou 23
something 4