我不明白..这很有趣,但我不明白))
请看下面
echo -n '\\prj\prj.prjjmbr.Interp\PRIL_35.jpg' | awk -F ';' '{a=length($1);print lenght a}'
Run Code Online (Sandbox Code Playgroud)
输出是35.这是对的
echo -n '\\prj\prj.prjjmbr.Interp\PRIL_35.jpg' | wc -c
Run Code Online (Sandbox Code Playgroud)
输出是35.这也是对的
echo -n '\\prj\prj.prjjmbr.Interp\Very long path with cyrillic symbols\?????????? ??????_?? ??????\??????\????? \Dinam_interp_2D_yujo-vost_ch_Urabor-Yahinskij_LU_2008 ( GNPTs_PurGeo ) \Otchet\GrafPril\PRIL_35.jpg' | awk -F ';' '{print length ($1)}'
Run Code Online (Sandbox Code Playgroud)
输出是202.
echo -n '\\prj\prj.prjjmbr.Interp\Very long path with cyrillic symbols\?????????? ??????_?? ??????\??????\????? \Dinam_interp_2D_yujo-vost_ch_Urabor-Yahinskij_LU_2008 ( GNPTs_PurGeo ) \Otchet\GrafPril\PRIL_35.jpg' | wc -c
Run Code Online (Sandbox Code Playgroud)
输出是237.
为什么非拉丁符号我会得到不同的结果?我怎么解决它?
ps修复后,我需要使用substr函数,即substr(path,10,8);
Pet*_*ren 11
使用非拉丁符号会得到不同的结果,因为字符串中的字符数与字符串中的字节数之间存在差异.wc -c返回字节数,awk返回字符数.
确保使用正确的号码.如果需要存储字符串,则需要知道字节数.如果需要显示字符串,则可能对字符数更感兴趣.
来自man wc:
-c, - byte打印字节计数
来自man awk:
从版本3.1.5开始,gawk具有多字节意识.这意味着index(),length(),substr()和match()都可以按字符而不是字节工作.