如何仅截断给定的列长度?

eva*_*ine 3 sed awk

输入:

a@notebook:~$ cat in.csv
'XYZ843141'^'ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFREQTzKb   aSFfdsaADSFSA  adsFdsa34 34 ASFfsas  saftrzj etrzrasdfasffasf safs'^'foooobaaar'^'ZZZ'^'..... and so on, further columns
Run Code Online (Sandbox Code Playgroud)

输出:

a@notebook:~$ cat in.csv | SOMEMAGIC
'XYZ843141'^'ASDFSAFXYVFSHGDSDg s'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFRE'^'foooobaaar'^'ZZZ'^'..... and so on, further columns
Run Code Online (Sandbox Code Playgroud)

我的问题:如果:

'^'
Run Code Online (Sandbox Code Playgroud)

是分隔符,那么 SOMEMAGIC (awk/sed??) 如何将第二列截断为给定长度?示例:最多 20 个字符,来自:

ASDFSAFXYVFSHGDSDg sdGDS  dsGDSgfa assfd faSDFAS saDFSAFD adFSA343fa sdfSADF
Run Code Online (Sandbox Code Playgroud)

对此:

ASDFSAFXYVFSHGDSDg s
Run Code Online (Sandbox Code Playgroud)

并保留所有其他内容:\

Hau*_*ing 5

> awk -v OFS="'^'" -F"'\\\\^'" '{if(length($2)>20) $2=substr($2,1,20); print;}' file
'XYZ843141'^'ASDFSAFXYVFSHGDSDg s'^'BAAAR'^'YYY'^'..... and so on, further columns
'YYZ814384'^'ASfdEtRiuognfnseaFRE'^'foooobaaar'^'ZZZ'^'..... and so on, further columns
Run Code Online (Sandbox Code Playgroud)