【发布时间】:2017-09-23 00:23:43
【问题描述】:
希望打印增量计数,然后打印第 1 列和第 2 列和第 3 列中唯一值的计数 ...列 NF 和列 $0 如果单词在第 1 列只出现一次,想将备注打印为“否”作为重复标志 如果该词在第 1 列出现多次,想将备注打印为“是”作为重复标志
看起来像这样
awk -F"," '{OFS=","; if (word == $1) { counter++ } else { counter = 1; word = $1 }; print $0 ",", "Yes/No", counter }'
例如,我正在尝试检查字段 $1 (Fruits Name) 中是否有任何重复信息。 在名称字段下,“Apple”出现 3 次,“Orange”出现 2 次,“Mango”出现 1 次。 因此,如果任何单词的重复次数不超过一次,则视为“Name_Dup=No”重复,出现次数为“Name_Counter=1”(即 Mango)
其中“Apple”出现 3 次,因此重复/重复 - 当第一次出现计数为“Name_Dup=Yes”且 Name_Counter=1”时,将其标记为“Yes”, 当它第二次出现“Name_Dup=Yes”和 Name_Counter=2 时,当它第三次出现“Name_Dup=Yes”和 Name_Counter=3 时
然后需要检查每一列 $2, $3 .. 直到 $NF 和 $0 ..
我的实际输入文件没有按任何顺序排序。过去的字段数不等,如 10 个字段、12 个字段和 15 个字段等
输入.csv
Name,Amount,Dept
Apple,10,eee
Orange,20,csc
Apple,30,mec
Mango,40,sss
Apple,10,eee
Orange,10,csc
期望的输出
Name,Amount,Dept,Name_Dup,Name_Counter,Amount_Dup,Amount_Counter,Dept_Dup,Dept_Counter,EntireLine_Dup,EntireLine_Counter
Apple,10,eee,Yes,1,Yes,1,Yes,1,Yes,1
Orange,20,csc,Yes,1,No,1,Yes,1,No,1
Apple,30,mec,Yes,2,No,1,No,1,No,1
Mango,40,sss,No,1,No,1,No,1,No,1
Apple,10,eee,Yes,3,Yes,2,Yes,2,Yes,2
Orange,10,csc,Yes,2,Yes,3,Yes,2,No,1
例如,请参考以下步骤。
步骤#1 - 字段 $1 检查和输出
Name,Name_Dup,Name_Counter
Apple,Yes,1
Orange,Yes,1
Apple,Yes,2
Mango,No,1
Apple,Yes,3
Orange,Yes,2
步骤#2 - 字段 $2 检查和输出
Amount,Amount_Dup,Amount_Counter
10,Yes,1
20,No,1
30,No,1
40,No,1
10,Yes,2
10,Yes,3
步骤#3 - 字段 $3 检查和输出
Dept,Dept_Dup,Dept_Counter
eee,Yes,1
csc,Yes,1
mec,No,1
sss,No,1
eee,Yes,2
csc,Yes,2
Step#4-Field $0 check,$1 & $2 & $3 和输出的组合
"Name,Amount,Dept",EntireLine_Dup,EntireLine_Counter
"Apple,10,eee",Yes,1
"Orange,20,csc",No,1
"Apple,30,mec",No,1
"Mango,40,sss",No,1
"Apple,10,eee",Yes,2
"Orange,10,csc",No,1
【问题讨论】:
-
不太清楚,能否请您添加更多关于您的预期输出的解释,因为为什么很少有字段有 NO 甚至它们在 Input_file 中的计数超过 1。
-
RavinderSingh13 ,我已将步骤#1 添加到步骤#4,如果您需要任何其他详细信息,请查看并告知
-
对不起,但还不清楚,当您需要是时,我们可以有条件吗?当您需要 1 等时,请也在这里?