Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Unix awk基于特定列数据创建包含重复数的列_Unix_Awk_Count_Counter - Fatal编程技术网

Unix awk基于特定列数据创建包含重复数的列

Unix awk基于特定列数据创建包含重复数的列,unix,awk,count,counter,Unix,Awk,Count,Counter,在以下data.txt文件中,第2列和第3列中的值在几行内重复(尽管行不相同): 如何根据每行第2列和第3列内容添加第5列,指定最大重复次数? 例如,所需的输出将如下所示: cat desired.output.txt > Julie Andrews jand 109 2 Julie Andrews jand 119 2 John Thomas jd 301 1 Alex Tremble atrem 415

在以下data.txt文件中,第2列和第3列中的值在几行内重复(尽管行不相同):

如何根据每行第2列和第3列内容添加第5列,指定最大重复次数? 例如,所需的输出将如下所示:

cat desired.output.txt > 
Julie   Andrews jand    109     2
Julie   Andrews jand    119     2
John    Thomas  jd      301     1
Alex    Tremble atrem   415     3
Alex    Tremble atrem   3415    3
Alan    Tremble atrem   215     3
John    Tomas   jd      302     4
John    Tomas   jd      3302    4
John    Tomas   jd      3402    4
John    Tomas   jd      33302   4
Alex    Trebe   atrem   416     1
目前,我有以下命令,它为每个副本创建一个简单计数器(但是,这不是所需的输出):


对于未排序的文件,最简单也是最方便的方法是双重扫描输入文件

$ awk -v OFS='\t' 'NR==FNR {count[$2,$3]++; next} 
                           {print $0, count[$2,$3]}' file{,}

Julie   Andrews jand    109     2
Julie   Andrews jand    119     2
John    Thomas  jd      301     1
Alex    Tremble atrem   415     3
Alex    Tremble atrem   3415    3
Alan    Tremble atrem   215     3
John    Tomas   jd      302     4
John    Tomas   jd      3302    4
John    Tomas   jd      3402    4
John    Tomas   jd      33302   4
Alex    Trebe   atrem   416     1
如果文件已排序或太大,则可以收集所有条目,并在上下文更改时打印计数


ps.请注意,
文件{,}
是一种bash速记,用于
文件文件
两次处理同一文件。

对于未排序的文件,最简单的方法是双重扫描输入文件

$ awk -v OFS='\t' 'NR==FNR {count[$2,$3]++; next} 
                           {print $0, count[$2,$3]}' file{,}

Julie   Andrews jand    109     2
Julie   Andrews jand    119     2
John    Thomas  jd      301     1
Alex    Tremble atrem   415     3
Alex    Tremble atrem   3415    3
Alan    Tremble atrem   215     3
John    Tomas   jd      302     4
John    Tomas   jd      3302    4
John    Tomas   jd      3402    4
John    Tomas   jd      33302   4
Alex    Trebe   atrem   416     1
如果文件已排序或太大,则可以收集所有条目,并在上下文更改时打印计数


ps.请注意,
文件{,}
是一种bash速记,用于
文件文件
处理同一文件两次。

您的文件不能包含
John Andrews jand 109
?如果是这样的话,添加它以显示当普通的第2+3列有不同的第1列时输出的样子。您的文件不能包含
John Andrews jand 109
?如果是这样,添加它以显示当公共第2+3列有不同的第1列时,输出将是什么样子。
$ awk -v OFS='\t' 'NR==FNR {count[$2,$3]++; next} 
                           {print $0, count[$2,$3]}' file{,}

Julie   Andrews jand    109     2
Julie   Andrews jand    119     2
John    Thomas  jd      301     1
Alex    Tremble atrem   415     3
Alex    Tremble atrem   3415    3
Alan    Tremble atrem   215     3
John    Tomas   jd      302     4
John    Tomas   jd      3302    4
John    Tomas   jd      3402    4
John    Tomas   jd      33302   4
Alex    Trebe   atrem   416     1