Jiné řešení:
for item in $(cat "$infile"); do
length[${#item}]=$item # use word length as index
done
maxword=${length[@]: -1} # select last array element
printf "longest word '%s', length %d" ${maxword} ${#maxword}
Normálně byste chtěli použít while read
smyčka namísto for i in $(cat)
, ale protože chcete, aby byla všechna slova rozdělena, v tomto případě by to fungovalo OK.
#!/bin/bash
longest=0
for word in $(<so.txt)
do
len=${#word}
if (( len > longest ))
then
longest=$len
longword=$word
fi
done
printf 'The longest word is %s and its length is %d.\n' "$longword" "$longest"
bash one liner.
sed 's/ /\n/g' YOUR_FILENAME | sort | uniq | awk '{print length, $0}' | sort -nr | head -n 1
- číst soubor a rozdělovat slova (přes sed)
- odstranit duplikáty (pomocí řazení | uniq)
- před každým slovem uveďte jeho délku (awk)
- seřadit seznam podle délky slova
- vytiskněte jedno slovo s největší délkou.
ano, bude to pomalejší než některá z výše uvedených řešení, ale také to nevyžaduje zapamatování sémantiky bash for smyček.
longest=""
for word in $(cat so.txt); do
if [ ${#word} -gt ${#longest} ]; then
longest=$word
fi
done
echo $longest
Přidávání uživatelů do sudoers pomocí skriptu shellu
Existují standardy pro přepínače a argumenty příkazového řádku Linuxu?