编号列中的唯一值

时间:2013-03-25 15:48:36

标签: count awk unique sas

我有一个文件,其中第一列有一个家庭标识符列表

AB
AB
AB
AB
SAR
SAR
EAR

有没有办法可以创建一个新列,其中每个重复都被编号,为每个重复创建一个新标签,即

AB_1
AB_2
AB_3
AB_4
SAR_1
SAR_2
EAR_1

我可以在SAS中执行此操作,但我正在寻找bash选项(可能是awk)

data file;
set file; 
count+1;
by name;
if first.name then count=1;
new_name=compress(name||'_'||count);
run;

2 个答案:

答案 0 :(得分:4)

$ awk '{print $1"_"++a[$1]}' file
AB_1
AB_2
AB_3
AB_4
SAR_1
SAR_2
EAR_1

答案 1 :(得分:2)

试试这个单行:

awk '{a[$0]++;print $0"_"a[$0]}' file

输入数据:

kent$ echo "AB
AB
AB
AB
SAR
SAR
EAR"|awk '{a[$0]++;print $0"_"a[$0]}'
AB_1
AB_2
AB_3
AB_4
SAR_1
SAR_2
EAR_1