sun*_*etl 4 text-processing csv
你能告诉我如何找到给定字段中字符的最大长度吗?
例如,使用以下输入文件:
s.no,name
1,ATM
35,money
63,back
Run Code Online (Sandbox Code Playgroud)
字段 1 中的最大长度为 2。因此,我希望输出为:
s.no,name
01,ATM
35,money
63,back
Run Code Online (Sandbox Code Playgroud)
在这里,如果数字<2,我们只需在数字前添加零。请帮我。
首先,您需要找到最大长度。逗号是字段分隔符,您需要忽略第一行:
len=$(awk -F, 'BEGIN{mn=0;} NR>1{n=length($1);mn=mn>n?mn:n;}END{print mn}' test.txt)
Run Code Online (Sandbox Code Playgroud)
现在我们使用 printf 来扩展第一个字段:
awk -F, 'NR==1{print $0};NR>1{ printf("%0'"$len"'d,",$1); for(i=2;i<=NF;i++)print($i); }' < test.txt
Run Code Online (Sandbox Code Playgroud)
请注意单引号在"$len"插入字段长度之前结束,然后继续。
编辑(感谢@dave_thompson_085提供了更优雅的解决方案):
len=$(awk -F, 'BEGIN{mn=0} NR>1{n=length($1);mn=mn>n?mn:n;}END{print mn}' test.txt)
awk -F, -vOFS=, -vmn=$len 'NR>1{ $1=sprintf("%0*d",mn,$1)} 1' test.txt
Run Code Online (Sandbox Code Playgroud)
其中最后一个1表示 true ,而空动作表示{print}。