Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何计算文件中的唯一字段?_Perl_Awk - Fatal编程技术网

Perl 如何计算文件中的唯一字段?

Perl 如何计算文件中的唯一字段?,perl,awk,Perl,Awk,我的文件夹里有一些文本文件。文本文件的数据如下所示 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     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
如果秩序很重要

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

给定
parse.awk
中的
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

我想知道是谁投了这个票。你是如何得到输出的第二列中的数字的?@perreal“根据第三列的数字,第一列和第二列中每个国家的唯一数字”——是的,它加起来就是他所说的数字says@janos是的,但似乎OP输入或output@mpapec谢谢你的回答。中国应该是2。这不是一个错误。@user312011检查update@mpapec您的代码在单个文件中运行良好。如何更改多个文件的代码?@user312211将它们放在命令行=>
perl'..”file1 file2 file3
+1我认为这是一个有趣的解决方案。我只是想知道你是否可以避免使用这个功能?@janos谢谢你的回答。第一列的最后一个字符不在我的输出中打印。此外,我还想将输出打印到另一个文件夹,其中包含输入的文件名。如何更改您的程序?@user312211我不明白您第一列最后一个字符的问题。。。但无论如何,mpapec的Perl解决方案更好。对于你问题的第二部分,我认为最好再问一个问题,如果你不想让它结束,你必须表现出一些努力:尝试做一些事情,展示你所做的,然后寻求帮助。
$ awk -f parse.awk data.txt
USA 1
France 2
Germany 2
China 2
Italy 1