Сохранение начала вашей команды:
{ head -n 10 file.txt ; tail -n 10 file.txt; } |
grep $NAME | sort -t '\' -k 4 -k 5 |
awk -F'\\' '!wage{wage=$4;id=$1;next} wage==$4{id=$1} END{print id}'
Скрипт awk
в основном помещает в формулу текстовое описание алгоритма, которое вы дали.
Конечно, вы также можете заменить первые 3 команды в конвейере еще одной логикой awk, например:
$ myFun() {
awk -F'\\' -v s=$2 -v l=`wc -l<$1` '
$2==s&&(NR<11||NR>l-11)&&(!wage||wage>$4||(wage==$4&&$5>perf)){
wage=$4; id=$1; perf=$5;
}
END{ print id; }' $1; }
$ myFun exampleData.dsv Teclu
382144
$ myFun exampleData.dsv Gaman
416161
Примечание к OP в комментарии: переменные '$ 1', '$ 2' и т. Д. В awk независимы одноименных переменных внешней оболочки.
Похоже, вы используете версию gcc дистрибутива по умолчанию (, вероятно, 6 или 7 ). Согласно документу INSTALL, gcc 5 — единственная поддерживаемая версия. Вы можете проверить версию с помощью gcc --version
. Чтобы изменить версию в Ubuntu, выполните следующее:
sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 1