Показана альтернатива, использующая различные инструменты, grep
, awk
, sort
, & uniq
. Конечно, он использует больше инструментов, но мне легче понять, что происходит, по сравнению с AWK.
$ for i in 1.txt 2.txt; do grep -f <(awk '{print $1}' $i) file1.txt; done | \
awk '{print $1}' | sort | uniq -c
$ for i in 1.txt 2.txt; do grep -f <(awk '{print $1}' $i) file1.txt; done | \
awk '{print $1}' | sort | uniq -c
1 get
2 move
1 put
Вот пример, немного развернутый.
$ for i in 1.txt 2.txt; do
grep -f <(awk '{print $1}' $i) file1.txt
done | \
awk '{print $1}' | sort | uniq -c
Цикл for
перебирает 2 файла, с которыми мы сопоставляем: 1.txt
и 2.txt
. Каждый раз в цикле мы используем первый столбец одного из этих файлов как статический набор строк для grep
, ища их в нашем целевом файле, file1.txt
.Это строка, которая делает это:
$ grep -f <(awk '{print $1}' $i) file1.txt
После запуска этого с использованием каждого файла из цикла for
мы берем весь этот вывод и выбираем только его первый столбец:
move
put
move
get
Затем мы используем sort
и uniq
, чтобы подсчитать, сколько типов каждого типа мы видели.
Вы можете найти общедоступный компьютер, например библиотеку или что-то в этом роде, и загрузить пакет с сайта Debian, а затем попытаться найти все зависимости:
http://deb.debian.org/debian/pool/main/b/build-essential/build-essential_12.3.tar.gz
Выезд:
https://packages.debian.org/source/stretch/build-essential
Если у вас есть система с Интернетом и установленным Debian или Ubuntu или на виртуальной машине (VirtualBox работает в Windows ), тогда на этой машине получите пакеты с зависимостями:
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
ИЛИ
Вы можете использовать apt -rdepends для создания полного набора зависимостей (рекурсивно ), включая основной пакет, а затем загрузить его:
apt-get download $(apt-rdepends "${package}" | grep -v ^\ )
(заменив, конечно, "${package}" ).
Как загрузить пакет и его зависимости с помощью aptitude?
Затем вы используете карту памяти USB и копируете файлы на автономный сервер:
cp -R /mnt/USBstick/* /root/packeges && cd /root/packages
Тогда у вас есть несколько способов установки, вот один из них:
dpkg -i <deb file>
он не сможет сказать, что ему нужны зависимости. После этого, когда вы выполняете apt -get update, в конце будет сказано что-то вроде «зависимости готовы к установке». Я думаю, что тогда рекомендуется использовать
apt-get install -f
Как только это будет сделано, я использую
dpkg -i
снова.
РЕДАКТИРОВАТЬ :Вот depends
для сборки -основные:
[21:33:49][root] /home/USER [HOST]
~↓↓$↓↓ apt-cache depends build-essential
build-essential
|Depends: libc6-dev
Depends: <libc-dev>
libc6-dev
Depends: gcc
Depends: g++
Depends: make
make-guile
Depends: dpkg-dev
ivan@darkstar:~$ cat /usr/share/doc/build-essential/list
List of Build-Essential packages
as of 2017-09-17, Debian sid
This file lists the non-essential packages that are build-essential.
The list is not closed under the "depends on" relation, so one will
usually need to install more packages than given here.
This list attempts to document the set of build-essential packages as
well as possible. However, it is not authoritative (actually, there
is no authoritative list at all); the definition of the
"build-essential" class of packages given in Debian Policy Manual
(version >= 3.6.1.1), section 4 "Source packages" (more precisely
subsection 4.2 "Package relationships") is the definitive answer.
Here's the definition (as of Policy 3.6.1.1):
It is not necessary to explicitly specify build-time relationships
on a minimal set of packages that are always needed to compile,
link and put in a Debian package a standard "Hello World!" program
written in C or C++. The required packages are called
_build-essential_, and an informational list can be found in
`/usr/share/doc/build-essential/list' (which is contained in the
`build-essential' package).
The list is given below in a format which is readable by both humans and
programs. The format is described at the end of this file.
BEGIN LIST OF PACKAGES
libc6-dev [!alpha !ia64 !hurd-i386] | libc0.3-dev [hurd-i386] | libc6.1-dev [alpha ia64] | libc-dev
Provides the ISO C standard library
Indirectly depended on by g++, but we'll ignore
it since libc6-dev is used for non-C++ programs too.
libc6-dev-sparc64 [sparc]
Used only on the sparc architecture.
gcc (>= 4:7.2)
g++ (>= 4:7.2)
NOTE:
The libstdc++ -dev library is not needed, as g++ depends on it
make
Also depended on by dpkg-dev, but make does warrant its own
dependency since debian/rules will need it even if dpkg-dev
stopped depending on it
dpkg-dev (>= 1.17.11)
Provides dpkg-genchanges and other scripts. Versioned, because
of support for the build-time dependency fields in /debian/control
and dpkg-architecture support for OS and CPU information.
NOTE:
Although this list does not contain them, all `Essential: yes'
packages are build-essential as well. A list of such packages
can be found by executing the following command
`grep-status -FEssential -sPackage -ni yes'
when the `grep-dctrl' package is installed and in its default
configuration. Such list is installed with this package as
the file
`/usr/share/doc/build-essential/essential-packages-list'
hurd-dev [hurd-i386]
Provides libpthread.so (and other such essential components).
END LIST OF PACKAGES
Here's the format definition:
- First line is the following, without any leading or trailing
whitespace:
BEGIN LIST OF PACKAGES
- Last line is the following, without any leading or trailing
whitespace:
END LIST OF PACKAGES
- A line with leading whitespace is a comment.
- Other lines are joined with end-of-line replaced by comma, and
the result is parsed like the body of the Build-Depends field.
The list of build-essential packages for a particular
architecture is constructed from the result list by ignoring all
the package name - package version pairs which would be ignored
if we were building for that architecture and then removing the
architecture specifications.