awk字符串替换

时间:2014-02-27 12:14:26

标签: string bash awk

我需要将csv字符串拆分为数组,如果元素的内容超过300个字符,则将其元素的内容剪切为lngth或300。 我非常接近它,但由于某种原因,我无法弄清楚,这是行不通的:

awk '{split($0,fields,",") 
 for(field in fields)
    if(length(fields[field]) >300){
     gsub(fields[field],substr(fields[field],0,300),$0)
   } print 
 }' file_in.csv > file_out

我在运行此测试时可以看到它:

awk '{split($0,fields,","); for(field in fields) if(length(fields[field]) >=301){print fields[field]} }' file_out

这仍然是一些领域 我的awk有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此awk修剪字段> 300:

awk 'BEGIN{FS=OFS=","} 
     {for (i=1; i<=NF; i++) if (length($i)>300) $i=substr($i,1,300)}
     1' file.csv

答案 1 :(得分:0)

我已将300改为3以使其可读:

$echo "Hello,World"| awk '{split($0, fields,",");str=""; for (field in fields){str = str substr(fields[field],0,3) ","}; print substr(str,0,length(str)-1)}'
Hel,wor

线条有点长,分裂是:

awk '{split($0, fields,",");
      str="";
      for (field in fields){
         str = str substr(fields[field],0,3) ","
      };
      print substr(str,0,length(str)-1)}'