我想使用awk删除以下输入文件的第二个字段中“:”之后的所有值。
输入
text1 [a:2,b:1,c:4,k:0]
text2 [d:1,a:5,f:3.2]
输出
text1 a,b,c,k
text2 d,a,f
我能够使用R来做到这一点但是对于较大的文件来说这有点慢。
答案 0 :(得分:7)
使用sed
(假设您也要删除括号):
$ sed 's/\[\|:[^,]*//g' file
text1 a,b,c,k
text2 d,a,f
使用awk
:
$ awk '{gsub(/\[|:[^,]*/,"")}1' file
text1 a,b,c,k
text2 d,a,f
答案 1 :(得分:1)
另一种方法:
awk '{
printf "%s ", $1
n = split($2, a, /[][,:]/)
sep=""
for (i=2; i<n; i+=2) {
printf "%s%s", sep, a[i]
sep=","
}
print ""
}' <<END
text1 [a:2,b:1,c:4,k:0]
text2 [d:1,a:5,f:3.2]
END
text1 a,b,c,k
text2 d,a,f