使用awk解析包含逗号的制表符分隔文件

时间:2014-05-16 19:28:53

标签: linux bash awk gawk

我想使用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来做到这一点但是对于较大的文件来说这有点慢。

2 个答案:

答案 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
相关问题