Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Awk字符串替换_String_Bash_Awk - Fatal编程技术网

String Awk字符串替换

String Awk字符串替换,string,bash,awk,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_

我需要将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出了什么问题吗?

我把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)}'

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

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

如果您不为此使用内联脚本,这将对您和我们都有帮助。这还不够琐碎。我会将其保存到一个文件中,在其中添加一些换行符,然后返回完成,感谢tipAvoid在这种情况下使用
gsub
,因为字符
`被解释为特殊字符(分别为通配符和转义下一个字符)。相反,只调用substr`.@Bentoy13您是指sub(),而不是substr()@JBoy不需要调用
gsub
sub
substr
足以获得正确的输出。