/ / Bash - znalezienie minimalnej liczby na linię - linux, bash

Bash - znalezienie minimalnej liczby na linię - linux, bash

Próbuję lepiej poznać instrukcje awk, szczególnie te, które można wykonać za pomocą tylko jednej linii. Mam plik, który wygląda tak

9 5 0 2
8 7 4 3
4 8 2 1

Chcę wyglądać jak wyjście

0
3
1

Czy jest sposób, w jaki mogę to zrobić, używając tylko jednej linijki za pomocą awk? Dziękuję Ci.

Odpowiedzi:

3 dla odpowiedzi № 1

Korzystanie z awk:

awk "{min=$1; for (i=2; i<=NF; i++) if ($i < min) min=$i; print min}" file
0
3
1

3 dla odpowiedzi № 2

Są to języki z wbudowanymi funkcjami "min":

ruby -ane "puts $F.min" file

Lub dostępne biblioteki

perl -MList::Util=min -lane "print min @F" file

Ograniczanie do powłoki:

min() { printf "%sn" "$@" | sort -n | head -1; }
while read -a nums; do
echo $(min "${nums[@]}")
done < file

1 dla odpowiedzi nr 3

GNU awk, który znajdziesz w większości dystrybucji Linuksa, ma wbudowaną funkcję sortowania, 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 dla odpowiedzi nr 4

Możesz to zrobić Pyton (v 2.7.5 i wyżej) również:

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)"