Попробуйте это,
awk -F ',' 'NR==FNR{a[$1]++;next};a[$1] == 0' List2 List1
2,name2
4,name4
5,name5
8,name8
9,name9
a[$1]++; next
:сохраняет 1-е поле в массиве. Затем a[$1] == 0
:блок else будет выполняться, только если это второй файл, поэтому мы проверяем, было ли уже просмотрено поле 1 этого файла(a[$1]==0
). Awk& #xA0;программа:
FNR == 1 { next; }
FNR == 2 { max = min = $2; next }
{
if ($2 > max) {
max = $2;
} else if ($2 < min) {
min = $2;
}
}
END { printf("max: %d, min: %d\n", max, min); }
Использование:
$ awk -f./tmp.awk./tmp.txt
max: 50, min: 20
Математические операции также можно выполнять с помощью утилиты настольного калькулятора dc в Linux. Он работает с данными, присутствующими в его стеке. И когда мы читаем строку, используя ? команда, она помещает операнды (через пробел )в стек. Он включает рекурсивный вызов команд, хранящихся в регистрах. Вы можете прочитать больше в руководстве gnu dc.
$ if="abc.txt"
$ declare -a a=($(< "$if" tr x- x_ | sed 1d | dc -e "
[q]sq [sMd]sa [sNd]sb
[?z0=qddlM<adlN>bcz0=?]s?
?c ?dsMsN cl?x lMlNf"))
$ min=${a[0]} max=${a[1]}
$ echo "min:$min nax:$max"
min:20 max:50