此脚本将cvs列表分为三列。 我们专注于" name"柱。我想发现具有最多字符的名称。一旦找到具有最多字符的名称,我想将其分配给变量。
#!/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
脚本说 - 英文 - 如果长度大于maxlength,则将长度设置为maxLength,否则不执行任何操作。 其中包含最多字符的区域字符串是" script_name_12345678999999"当脚本读完所有字符时,$ 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
一旦脚本达到其中包含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
答案 0 :(得分:2)
在GNU / Linux上,您也可以一次性完成此操作。如果文件data
包含您的记录:
cut -d, -f2 < data | wc -L
英文:
答案 1 :(得分:2)
my_command | sort -n | tail -1
按数字升序排列命令的输出。获取结果列表中的最后一个元素。
答案 2 :(得分:1)
您的循环有点不稳定(技术术语),并且您在循环的每次迭代中将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"
示例使用/输出
$ bash maxnm.sh <dat/maxnm.txt
maxname: script_name_12345678999999 (len: 26)
仔细看看,如果您有其他问题,请告诉我。
答案 3 :(得分:1)
如果你可以使用awk那么容易
因为你说:
此脚本将cvs列表分为三列。我们正在关注 关于&#34;名称&#34;柱。我想发现最多的名字 字符
awk -F, '{l=length($2)}l>max{max=l; name=$2}END{print name, max}' infile
这是测试结果:
$ cat infile
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
$ awk -F, '{l=length($2)}l>max{max=l; name=$2}END{print name, max}' infile
script_name_12345678999999 26
如果您只想将max_name的script_name变为变量,那么只需打印变量名称,然后将其包含在$(....)
内,如下所示
$ myvar=$( awk -F, '{l=length($2)}l>max{max=l; name=$2}END{print name}' infile )
$ echo "$myvar"
$ script_name_12345678999999