awk 根据特定列数据创建包含重复项数的列
awk creating column holding number of duplicates based on specific columns data
在以下 data.txt 文件中,第 2 列和第 3 列中的值在几行中重复(尽管行不相同):
cat data.txt >
Julie Andrews jand 109
Julie Andrews jand 119
John Thomas jd 301
Alex Tremble atrem 415
Alex Tremble atrem 3415
Alan Tremble atrem 215
John Tomas jd 302
John Tomas jd 3302
John Tomas jd 3402
John Tomas jd 33302
Alex Trebe atrem 416
如何根据每行第 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 -F "\t" '{OFS="\t"}{print [=12=],++cnt[,]}' data.txt
Julie Andrews jand 109 1
Julie Andrews jand 119 2
John Thomas jd 301 1
Alex Tremble atrem 415 1
Alex Tremble atrem 3415 2
Alan Tremble atrem 215 3
John Tomas jd 302 1
John Tomas jd 3302 2
John Tomas jd 3402 3
John Tomas jd 33302 4
Alex Trebe atrem 416 1
对于未排序的文件,最简单的方法是双重扫描输入文件
$ awk -v OFS='\t' 'NR==FNR {count[,]++; next}
{print [=10=], count[,]}' 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. 注意 file{,}
是 bash shorthand for file file
处理相同归档两次。
在以下 data.txt 文件中,第 2 列和第 3 列中的值在几行中重复(尽管行不相同):
cat data.txt >
Julie Andrews jand 109
Julie Andrews jand 119
John Thomas jd 301
Alex Tremble atrem 415
Alex Tremble atrem 3415
Alan Tremble atrem 215
John Tomas jd 302
John Tomas jd 3302
John Tomas jd 3402
John Tomas jd 33302
Alex Trebe atrem 416
如何根据每行第 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 -F "\t" '{OFS="\t"}{print [=12=],++cnt[,]}' data.txt
Julie Andrews jand 109 1
Julie Andrews jand 119 2
John Thomas jd 301 1
Alex Tremble atrem 415 1
Alex Tremble atrem 3415 2
Alan Tremble atrem 215 3
John Tomas jd 302 1
John Tomas jd 3302 2
John Tomas jd 3402 3
John Tomas jd 33302 4
Alex Trebe atrem 416 1
对于未排序的文件,最简单的方法是双重扫描输入文件
$ awk -v OFS='\t' 'NR==FNR {count[,]++; next}
{print [=10=], count[,]}' 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. 注意 file{,}
是 bash shorthand for file file
处理相同归档两次。