Chinaunix
标题: 请问如何将第一列相同的第二列合到一行,并彼此间用逗号隔开 [打印本页]
作者: chenjiali1 时间: 2019-06-09 17:34
标题: 请问如何将第一列相同的第二列合到一行,并彼此间用逗号隔开
XP_002960178 GO:0055114
XP_002960178 GO:0003824
XP_002960417 GO:0034968
XP_002960417 GO:0018024
想合成这样的
XP_002960178 GO:0055114,GO:0003824
XP_002960417 GO:0034968,GO:0018024
请问如何实现,谢谢大家!
作者: jzsjm1002 时间: 2019-06-09 22:04
- awk '{a[$1]=a[$1]?a[$1]=a[$1]","$2:a[$1]=$2} END{for(i in a)print i,a[i]}' file
复制代码
作者: fengzi321 时间: 2019-06-13 17:12
怎么理解这条语句 a[$1]=a[$1]?a[$1]=a[$1]","$2:a[$1]=$2
我理解是:如果 a[$1]=a[$1] 为true,则执行a[$1]=a[$1]","$2 否则执行a[$1]=$2
可是 a[$1]=a[$1] 这不是一条赋值语句吗?赋值也有true,false之分?
谢谢!
作者: jzsjm1002 时间: 2019-06-13 22:57
回复 4# fengzi321
awk '' /etc/passwd
awk '0' /etc/passwd
输出都是空 awk 0和空都是无输出的
awk '1' /etc/passwd
awk '123' /etc/passwd
有输出
awk 'a=a' /etc/passwd
a赋值给a 变量a为空
a=a即 空=空 => awk '' /etc/passwd
?: awk三元操作符
if()...else...
if(a[$1]=a[$1])...else...
作者: fengzi321 时间: 2019-06-14 16:47
豁然开朗,非常感谢!
作者: wh7211 时间: 2019-06-21 15:23
回复 1# chenjiali1
- awk '!a[$1]++{if(b){print b;b=""}}{b=b?b","$2:$0}END{if(b){print b}}' file
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) |
Powered by Discuz! X3.2 |