我有一个文件,其中第一列有一个家庭标识符列表
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;
答案 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