Выбрать столбцы из большого файла, используя строки из другого файла

Abra el archivo /etc/default/gruby actualice la línea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

A la línea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_backlight=video"

Luego ejecute:

update-grub
reboot

Posibles parámetros alternativos en caso de que este no funcione (discusión completa en Comando del kernel -opciones de línea):

acpi_backlight=video
acpi_backlight=vendor
acpi_backlight=native
acpi_backlight=none

En mi caso, acpi_backlight=videoparece haber resuelto ambos problemas:

  • el brillo de la retroiluminación ya no se restablece al máximo durante el arranque (pregunta 1)
  • [Fn] + ←/→se configuró como acceso directo para disminuir/aumentar el brillo de la retroiluminación (pregunta 2)

Después de eso, hubo un conflicto con el acceso directo [Fn] + ←, que disminuía el brillo de la luz de fondo pero también abría la ventana Configuración de pantalla. Acabo de abrir Preferences > Setup Hot Keysy cambié la tecla de acceso rápido 'oscura' XF86Displaya otra cosa.

3
19.07.2019, 00:39
2 ответа

У меня была такая же ошибка на моем Mac.

  1. вам необходимо убедиться, что ваши файлы разделены табуляцией -и не имеют начальных или конечных пробелов.
  2. эту команду sed можно заменить наpaste -sd,
  3. уход:

    cut -f"$(grep -wFf LIST.TXT TMP | cut -f1 | paste -sd,)" DATA.TXT 
    

Но используйте решение awk, оно намного аккуратнее и не использует файл tmp, а также гораздо более щадяще относится к пробелам:

awk -v OFS='\t' '
    NR == FNR {header[$1] = 1; next}
    FNR == 1 {for (i=1; i<=NF; i++) if ($i in header) column[i] = 1}
    {for (i in column) printf "%s" OFS, $i; print ""}
' headers file

Немного поигравшись, работающий конвейер (whiteout, требующий tmp-файла ), это

cut -f"$(head -1 DATA.TXT | tr '\t' '\n' | nl | grep -Fwf LIST.TXT | awk '{print $1}' | paste -sd,)" DATA.TXT
2
27.01.2020, 21:24

Предположим, вы хотите, чтобы столбцы выводились в порядке, определенном в list.txt:

$ cat tst.awk
NR==FNR {
    name2out[$1] = ++numOutFlds
    next
}
FNR == 1 {
    for (inFldNr=1; inFldNr<=NF; inFldNr++) {
        outFldNr = name2out[$inFldNr]
        out2in[outFldNr] = inFldNr
    }
}
{
    for (outFldNr=1; outFldNr<=numOutFlds; outFldNr++) {
        inFldNr = out2in[outFldNr]
        printf "%s%s", $inFldNr, (outFldNr < numOutFlds ? OFS : ORS)
    }
}

$ awk -f tst.awk list.txt data.txt
head0 head4
1 13
2 22
0
27.01.2020, 21:24

Теги

Похожие вопросы