Я намагаюся більше ознайомитися з твердженнями awk, особливо тим, що можна зробити лише з однієї лінії. У мене є файл, який виглядає так
9 5 0 2
8 7 4 3
4 8 2 1
Я хочу, щоб вихід виглядав
0
3
1
Чи є спосіб, яким я можу це зробити, використовуючи лише один вкладиш за допомогою awk? Дякую.
Відповіді:
3 для відповіді № 1Використання awk:
awk "{min=$1; for (i=2; i<=NF; i++) if ($i < min) min=$i; print min}" file
0
3
1
3 для відповіді № 2
Це мови з вбудованими функціями "min":
ruby -ane "puts $F.min" file
Або доступні бібліотеки
perl -MList::Util=min -lane "print min @F" file
Обмеження до оболонки:
min() { printf "%sn" "$@" | sort -n | head -1; }
while read -a nums; do
echo $(min "${nums[@]}")
done < file
1 для відповіді № 3
GNU awk, який ви знайдете в більшості дистрибутивів Linux, має вбудовану функцію сортування, asort
.
echo -e "9 5 0 2n8 7 4 3n4 8 2 1" |
awk "{ split($0,a); asort(a); print a[1]; }"
0
3
1
0 для відповіді № 4
Ви можете це зробити Python (v 2.7.5 і вище) також:
python -c "l="9 5 0 2".split(); print min(l); l="8 7 4 3".split(); print min(l); l="4 8 2 1".split(); print min(l)"