В зависимости от размера ваших файлов, это может быть не самый эффективный метод, но я думаю, что он будет работать в конкретном случае. Это не требует, чтобы файлы располагались в каком-либо определенном порядке, но требует, чтобы вы всегда предпочитали File1, а не File2:
#!/bin/bash
# Make a list of the unique identifiers in each of the files, changing the whitespace in between into a comma.
awk '{print $1 "," $2}' File1 File2| sort | uniq |
# Loop through all the unique identifiers we just found
while read l; do
# Create a regular expression for each identifier to use as
# a search term, changing the comma into "any number of whitespaces"
searchterm=$(echo $l | sed 's/,/\\\s*/')
# if this pattern exists in File1
if $(grep -E "$searchterm" File1 >& /dev/null); then
# print it out
grep -E "$searchterm" File1
else
# otherwise, print it if it's in File2
grep -E "$searchterm" File2
fi
done
Если вы хотите File3, вы можете сохранить его как скрипт и отправить туда вывод
#copy to merge_uniq.sh
chmod +x merge_uniq.sh
merge_uniq.sh > File3
Итак, насколько мне известно, netcat
не может использовать HTTPS, но в вашем коде вы подключались к порту 80, что означает HTTP, а не HTTPS.
После GET
нужно добавить относительный адрес, а не полный.
Что-то вроде этого будет работать:
echo -e "GET /files/ProcessExplorer.zip HTTP/1.1\r\nHost: download.sysinternals.com\r\n\r\n" | nc download.sysinternals.com 80 > q.temp
Он не закроется после завершения передачи, вам придется закрыть его вручную.
На этом этапе в файл q.temp
также включен HTTP-заголовок, его необходимо удалить. Вы можете проверить номер строки, где двоичное содержимое начинается с:
nl q.temp | less
В этом случае двоичное содержимое начинается со строки 16, поэтому вы можете удалить заголовок с помощью:
tail -n +16 q.temp > q.zip
А вот и ваш zip-файл!