Linux 为什么长度不对?

Linux 为什么长度不对?,linux,awk,gawk,Linux,Awk,Gawk,我不明白。。这很有趣,但我不明白 请看下面 echo -n '\\prj\prj.prjjmbr.Interp\PRIL_35.jpg' | awk -F ';' '{a=length($1);print lenght a}' 产量为35。是的 echo -n '\\prj\prj.prjjmbr.Interp\PRIL_35.jpg' | wc -c 产量为35。这也是对的 echo -n '\\prj\prj.prjjmbr.Interp\Very long path with cyri

我不明白。。这很有趣,但我不明白

请看下面

echo -n '\\prj\prj.prjjmbr.Interp\PRIL_35.jpg' | awk -F ';' '{a=length($1);print lenght a}'
产量为35。是的

echo -n '\\prj\prj.prjjmbr.Interp\PRIL_35.jpg' | wc -c
产量为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)}'
输出为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
输出为237

为什么使用非拉丁符号会得到不同的结果?我怎么能修好它


p、 s.修复后,我需要使用substr函数,即substr(路径,10,8)

我可以复制你的发现,并假设它与地区有关。 不是修复,而是“变通”


我可以复制你的发现,并假设它与地区有关。 不是修复,而是“变通”


使用非拉丁符号会得到不同的结果,因为字符串中的字符数和字符串中的字节数之间存在差异
wc-c
返回字节数,
awk
返回字符数

确保使用正确的号码。如果需要存储字符串,则需要知道字节数。如果需要显示字符串,您可能对字符数更感兴趣

man wc

-c、 --字节 打印字节计数

man awk

从3.1.5版开始,gawk具有多字节感知功能。这意味着 index()、length()、substr()和match()都以 字符,而不是字节


使用非拉丁符号会得到不同的结果,因为字符串中的字符数和字符串中的字节数之间存在差异
wc-c
返回字节数,
awk
返回字符数

确保使用正确的号码。如果需要存储字符串,则需要知道字节数。如果需要显示字符串,您可能对字符数更感兴趣

man wc

-c、 --字节 打印字节计数

man awk

从3.1.5版开始,gawk具有多字节感知功能。这意味着 index()、length()、substr()和match()都以 字符,而不是字节


wc-m
应产生OP需要的字符计数。gawk引入
--字符为字节
将所有输入数据视为单字节字符。
wc-m
应产生OP需要的字符计数。gawk引入
--字符为字节
将所有输入数据视为单字节字符。为什么使用
-F';',对我来说似乎没用?你为什么用
-F';',对我来说似乎没用?
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' | LANG=C awk -F ';' '{print length ($1)}'