cap*_*ser 1 bash list max while-loop
该脚本将 cvs 列表分成三列。我们专注于“名称”列。我想发现字符最多的名字。找到包含最多字符的名称后,我想将其分配给一个变量。
#!/bin/bash
for i in $(cat homeaway.txt )
do
echo $i | while IFS=, read -r area name host
do
maxLength=0
length=${#name}
if [ $length -gt $maxLength ] ; then
maxLength=$length
else
:
fi
printf "%s\n" $maxLength
done
done
Run Code Online (Sandbox Code Playgroud)
脚本说 - 英文 - 如果长度大于 maxlength,则将 length 设置为 maxLength,如果不是,则不执行任何操作。其中字符数最多的区域字符串是“script_name_12345678999999”,有26个。当脚本读取所有字符时,$maxLength应该返回26。
__DATA__
HOME,script_name_12345,USAhost.com
AWAY,script_name_123,USAhost.com
HOME,script_name_1,EUROhost.com
AWAY,script_name_123,USAhost.com
HOME,script_name_123456,EUROhost.com
AWAY,script_name_12345678999999,USAhost.com
HOME,script_name_1234,USAhost.com
AWAY,script_name_1234578,USAhost.com
HOME,script_name_12,EUROhost.com
AWAY,script_name_123456789,USAhost.com
Run Code Online (Sandbox Code Playgroud)
一旦脚本达到包含 26 个字符的区域值,它应该停止向 $maxLength 分配任何内容。相反,它返回每个字符串长度的列表,我不知道零是如何进入这里的
casper@casper01.com $ ./length_test.sh
17
0 ### how does the zero get in here ?
15
13
15
18
26 ###script_name_12345678999999
16
19
14
21
Run Code Online (Sandbox Code Playgroud)
在 GNU/Linux 上,您也可以一次性完成此操作。如果该文件data有您的记录:
cut --delimiter=, --fields=2 < data | wc --max-line-length
Run Code Online (Sandbox Code Playgroud)
用英语讲:
您的循环有点不稳定(技术术语),并且您maxLength在循环的每次迭代中都重置为零。你想要的东西更像是:
#!/bin/bash
fn="${1:-/dev/stdin}" ## read from file given as 1st argument (default stdin)
test -r "$fn" || { ## validate file is readable
printf "error: file not readable '%s'.\n" "$fn"
exit 1
}
declare -i maxlength=0 ## set maxlength before loop
maxname=
while IFS=, read -r area name host
do
test -n "$name" || continue ## if name not set get next line
len=${#name}
if [ "$len" -gt "$maxlength" ]; then ## test length against max
maxlength=$len ## update max if greater
maxname="$name" ## save name in maxname
fi
done <"$fn" ## feed loop by redirecting file
printf "maxname: %s (len: %d)\n" "$maxname" "$maxlength"
Run Code Online (Sandbox Code Playgroud)
使用/输出示例
$ bash maxnm.sh <dat/maxnm.txt
maxname: script_name_12345678999999 (len: 26)
Run Code Online (Sandbox Code Playgroud)
检查一下,如果您还有其他问题,请告诉我。
| 归档时间: |
|
| 查看次数: |
6705 次 |
| 最近记录: |