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 № 1Korzystanie 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)"