uname - это команда, которая должна быть введена в командной строке. Поэтому, если вы открываете терминал и набираете uname, он выдает слово Linux. В упомянутой вами команде вы найдете -r. Это вариант uname. Он инструктирует uname распечатать номер выпуска ядра. Поэтому он будет в основном распечатывать некоторые цифры (например, 3.2.0-41-amd64).
Вы должны ввести команду
sudo apt-get install linux-headers-$(uname -r) build-essential
, как она написана. [F8] сообщает вашей командной строке (лучшее слово будет shell), чтобы выполнить команду something и вставить вывод этой команды.
Итак, в вашем случае uname (при условии, что число, которое я написал правильно, что может быть не в вашем случае), команда, которая выполняется, - sudo apt-get install linux-headers-3.2.0-41-amd64 build-essential. В основном вы можете просто искать версию ядра и вставлять ее вручную.
Как вы теперь видите, ни одна из ваших версий не является правильной. Решение выглядит несколько иначе.
Это считывает все строки в a.txt и отслеживает все значения столбца 2. Затем он читает b.txt и печатает любые повторяющиеся значения столбца 2:
$ awk 'NR==FNR {seen[$2]=1; next} seen[$2]==1 {seen[$2]++; print $2}' a.txt b.txt
abcd
2dfg
Команда awk может быть разделена на две части. Первая часть:
NR==FNR {seen[$2]=1; next}
awk сначала проверяет, совпадает ли общее количество обработанных записей (строк), NR, с количеством записей, обрабатываемых в этом файле, . Это верно только для первого обработанного файла, который в этом случае является a.txt. Таким образом, для каждой строки из a.txt ассоциативный массив seen с ключом, установленным на значение второго столбца, $2, устанавливается в значение 1. Это будет использоваться для указания того, что это значение столбца-2 было «видно» в a.txt. Следующая команда: next, которая сообщает awk пропустить остальные команды и перейти к следующей записи.
Вторая часть:
seen[$2]==1 {seen[$2]++; print $2}
Из-за next в первой части выше, эта часть выполняется только файлом b.txt. Эта часть начинается с теста: он проверяет, было ли значение столбца-2, $2 для этой записи ранее. Если раньше было замечено, то выполняются команды в фигурных скобках. Первая команда в фигурных скобках seen[$2]++ увеличивает значение seen, так что мы больше не будем обрабатывать это значение столбца-2. (Следовательно, повторяющиеся значения столбца-2 игнорируются.) Вторая команда просто печатает значение столбца-2, которое было замечено ранее в a.txt.
Если мы можем верить, что повторений нет значения для столбца 2, возможен более простой сценарий:
$ awk '{print $2}' a.txt b.txt | sort | uniq -d
2dfg
abcd
Следующее однострочное perl выполнит задание:
perl -lane 'BEGIN{%h}$h{$ARGV."\n".$F[1]}++;END{foreach(keys(%h)){s/.*\n//;$f{$_}++};for(keys(%f)){print if$f{$_}>1}}' a.txt b.txt > c.txt