, а не тестирование для действительного исполняемого исполняемого исполняемого файла, возможно, лучше всего тестировать то, что такое текущая архитектура, затем выберите правильный исполняемый файл на основе этого. Например:
if [ $(uname -m) == 'armv6l' ]; then
tool-rpi
else
tool-osx
fi
Тем не менее, если тестирование исполняемого файла - это то, что вы действительно , хотите сделать, GNU файл
может сообщить вам архитектуру исполняемого файла:
user@host:~$ file $(whereis cat)
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x4e89fd8f129f0a508afa325b0f0f703fde610971, stripped
-121-----97785-
, если у вас есть доступ на ваш хост (в этом случае, я бы предположил, что вы входите в систему анонимно и не имеете доступа к записи) Zip / Tar Файлы перед загрузкой
Предполагая, что заработная плата и зарплатные границы всегда будут целыми числами, и что диапазоны зарплаты не перекрывают, вот-то, что может работать (в Bash
)
{ printf "indi Rank\n" ;
join -o1.1,2.2 <(tail -n +2 file1 | sort -b -k2,2) -1 2 -2 1 \
<(awk 'FNR > 1{for (i=$1; i<$2; ++i) printf "%d %s\n", i, $3}' file2 | sort -k1,1) ;}
indi Rank
sam Deputy
john Assistant
max Manager
Я бы не рекомендовал его на огромную кусок данных, но я думал, что попробую раствор Bash. Я не очень bash-беглый , но это похоже на «очевидный» способ обработки вещей, «алгоритмически говоря». Это в основном илет на каждый файл и ищет хорошего диапазона. Я дал некоторые детали в комментариях.
Сценарий должен быть выполнен таким образом:
$ ./script.sh [salaries] [ranges]
файл файл содержит зарплату Сэма, Джона и Макса, а диапазоны содержит ваши диапазоны и ранги (от 2000 до 4000 - заместитель , От 4000 до 6000 - секретарь, и так далее).
#!/bin/bash
test $# -ne 2 && exit 1
test ! -r "$1" -o ! -r "$2" && exit 2
# Open the salary file (3) and the ranges (4).
exec 3< "$1"
exec 4< "$2"
# Echo the salary headers.
read -d$'\n' headers <&3
echo "$headers" | tr -s ' '
# For each line in the salary file...
while read name salary; do
# Skip the ranges headers ("salary_min...").
read -d$'\n' skip <&4
# For each range...
while read min max rankname; do
# If the salary is within the range, print name and rank.
if [ "$salary" -ge $min -a "$salary" -lt $max ]; then
echo "$name $rankname"
fi
done <&4
# Reopen the range file for the next employee.
exec 4>&-
exec 4< "$2"
done <&3
exit 0
Обратите внимание, что мои проверки диапазона включены на нижней границе, но исключительно на более высоком:
[ "$salary" -ge $min -a "$salary" -lt $max ]
Вы можете изменить эту строку, если это не ожидаемое поведение. Я также пытался открыть файлы как можно редко, но поскольку Bash не обрабатывает , ищущий файл , мне все равно нужно регулярно закрывать / открывать файл диапазона. Если честно, я бы порекомендовал немного реализации более низкого уровня, если вы должны иметь дело с очень большими файлами. C было бы хорошо.