Несколько недель назад у меня была такая же проблема на моем ноутбуке. Он игнорировал мой GRUB2 и запускал Windows напрямую. Вот как я решил эту проблему:
/boot/efi/EFI/Microsoft
в Microsoft0
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
соответственно на/EFI/Microsoft0/Boot/bootmgfw.efi
Похоже, что BIOS моего ноутбука всегда ставит загрузчик Microsoft вверху списка, независимо от того, как вы его настроите. Таким образом, переименование каталога Microsoft
в разделе EFI может обмануть BIOS, и он не загрузится в Windows автоматически.
Вы должны указать разделитель полей FS
, а OFS
используется для разделителя выходных полей.
awk 'BEGIN { FS=OFS="," }
NR==FNR { saving[$1]=$2; next }
($1 in saving){ print $1, saving[$1], $2 }' file1 file2
Проблема с вашим кодом awk
в основном двоякая:
awk
использовать ,
в качестве разделителя полей. Вы можете сделать это с помощью -F,
. $1
ключом в массиве a
. Вы можете сделать это с $1 in a
в качестве условия перед последним блоком вашего кода. Это можно пропустить, если вы ожидаете, что все имена во втором файле присутствуют в первом (, но вы ничего не говорите об этом ). Вы также выводите поля в неправильном порядке по сравнению с ожидаемым выводом, и вы используете разделитель вывода по умолчанию, который является пробелом, а не запятой(OFS = ","
или OFS = FS
, в BEGIN
block исправит это ).
$ awk -F, 'BEGIN { OFS = FS } FNR == NR { names[$1] = $2; next } ($1 in names) { print $1, names[$1], $2 }' file1 file2
burnj01,Joe Burns,0001
burnj01,Joe Burns,0002
burnj01,Joe Burns,0010
burnj01,Joe Burns,2000
steves02,Santosh Steve,2048
steves02,Santosh Steve,2049
steves02,Santosh Steve,2091
$ join -t, <( sort file1 ) <( sort file2 )
burnj01,Joe Burns,0001
burnj01,Joe Burns,0002
burnj01,Joe Burns,0010
burnj01,Joe Burns,2000
steves02,Santosh Steve,2048
steves02,Santosh Steve,2049
steves02,Santosh Steve,2091
Это сортирует два файла и передает отсортированное содержимое утилите join
. Утилита join
выполняет реляционную операцию JOIN между двумя наборами данных в первом столбце (по умолчанию ), по сути INNER JOIN
, если вы знакомы с SQL. Мы используем -t,
с join
, чтобы указать, что столбцы разделены запятыми -.
Если ваша оболочка не понимает процесс подстановки <(... )
, то предварительно -отсортируйте данные. Утилита join
ожидает отсортированный ввод.
sort -o file1.sorted file1
sort file2 | join -t, file1.sorted -
rm -f file1.sorted