我在文件夹中有一些文本文件。文本文件的数据如下所示。
USA Germany 23-12
USA Germany 23-12
USA Germany 23-12
France Germany 15-12
France Germany 15-12
France Italy 25-50
China China 30-32
China China 30-32
我想根据第三列的数量计算第一和第二列中每个国家/地区的唯一编号。我需要将输出保存到另一个文件夹中作为输入的文件名。
期望的输出
USA 1
Germany 2
France 2
Italy 1
China 2
答案 0 :(得分:1)
perl -lane'
$F[2] .= 1 if $F[0] eq $F[1] and $s{$F[0]};
$s{$_}{$F[2]} = 1 for @F[0,1];
END { printf("$_\t%s\n", scalar keys %{$s{$_}}) for sort keys %s }
' file
如果订单很重要,
perl -lane'
$F[2] .= 1 if $F[0] eq $F[1] and $s{$F[0]};
push(@r,$s{$_} ? () : $_), $s{$_}{$F[2]} = 1 for @F[0,1];
END { printf("$_\t%s\n", scalar keys %{$s{$_}}) for @r }
' file
输出
USA 1
Germany 2
France 2
Italy 1
China 2
答案 1 :(得分:1)
鉴于awk
中的parse.awk
代码:
function get_name(name_colon_x) {
return substr(name_colon_x, 1, index(name_colon_x, ":") - 1)
}
{
u1[$1 ":" $3]
u2[$2 ":" $3]
}
END {
for (i in u1) u[get_name(i)]++
for (i in u2) u[get_name(i)]++
for (i in u) print i, u[i]
}
您的数据位于data.txt
,然后是:
$ awk -f parse.awk data.txt
USA 1
France 2
Germany 2
China 2
Italy 1