Regex Unix中的列处理

Regex Unix中的列处理,regex,shell,unix,awk,Regex,Shell,Unix,Awk,我的输入文件已被删除 col1, col2, col3, col4, col5, col6, col7 111,0.1, 0.5,[a,b,c,d], 我想用逗号分割col4中的值,并将前3个值放在col5、col6、col7中,忽略第4个值 预期产出: col1, col2, col3, col4, col5, col6, col7 111,0.1, 0.5,[a,b,c,d],a,b,c 请帮忙 我使用了以下命令: echo "col1\tcol2\tcol3\tcol4\tc

我的输入文件已被删除

col1, col2, col3, col4, col5, col6, col7
111,0.1, 0.5,[a,b,c,d],
我想用逗号分割col4中的值,并将前3个值放在col5、col6、col7中,忽略第4个值

预期产出:

col1, col2, col3, col4, col5, col6, col7
111,0.1, 0.5,[a,b,c,d],a,b,c
请帮忙

我使用了以下命令:

echo "col1\tcol2\tcol3\tcol4\tcol5\tcol6\tcol7" >> cipoc_output.csv
awk -F"," '$1=$1' OFS="\t" cipoc_input.csv >> cipoc_output.csv
cat cipoc_output.csv

您可以将此
gnu awk
FPAT
一起使用:

awk -v FPAT='\\[[^]]*]|[^,]+' 'NR > 1 {
   s=$4
   gsub(/^\[|,[^,]+\]$/, "", s)
   $0 = $0 s
} 1' file

请您尝试以下,书面和测试与显示的样本中


如果这还不是您所需要的全部,那么编辑您的问题,以提供更具代表性的样本输入/输出,而这并不适用于。

这里是一个
sed
解决方案,假设周围没有任何极端字符

> sed -e 's/\[\([^][]*\),[^,]*\],/&\1/g' file
col1, col2, col3, col4, col5, col6, col7
111,0.1, 0.5,[a,b,c,d],a,b,c

我尝试使用awk、sed和cut命令。但却无法得到它exactly@anubhava添加您添加的代码与您描述的问题毫无关系-它所做的只是打印标题并将逗号更改为制表符。
awk '
FNR==1{ print; next }
match($0,/\[[^]]*/){
  val=substr($0,RSTART,RLENGTH)
  start=RSTART
  end=RSTART+RLENGTH
  match(val,/.*,/)
  print substr($0,1,start) substr(val,RSTART+1,RLENGTH) substr($0,end) substr(val,RSTART+1,RLENGTH-2)
  val=start=end=""
  next
}
1
' Input_file
$ awk 'BEGIN{FS=OFS=","} NR==1{print; next} {o=$0; gsub(/[][]/,""); print o $4, $5, $6}' file
col1, col2, col3, col4, col5, col6, col7
111,0.1, 0.5,[a,b,c,d],a,b,c
> sed -e 's/\[\([^][]*\),[^,]*\],/&\1/g' file
col1, col2, col3, col4, col5, col6, col7
111,0.1, 0.5,[a,b,c,d],a,b,c