Как удалить некоторые столбцы в файле на основе информации во втором файле?

Хотя manpage-alert делает то, о чем вы просите, вы должны отметить, что список в ссылке из вашего вопроса создается другим процессом, а именно следующей проверкой в ​​Lintian:

https: / /github.com/Debian/lintian/blob/master/checks/manpages.pm

Таким образом, его можно получить, вызвав lintian с -T binary-without-manpage вариант (и другие параметры для выбора пакетов, которые вы хотите проверить).

1
10.08.2016, 19:04
2 ответа

С awk :

awk '
NR==FNR{for(i=1;i<=NF;i++){values[$i]};next}
FNR==1{for(i=1;i<=NF;i++){if ($i in values){nf[i]}}}
{sp=""; for(i=1;i<=NF;i++){if (i in nf){printf("%s%s",sp,$i);sp=" "}}}{print ""}
' file2 file1

Это сначала читает file2 , сохраняет каждое значение в массиве values ​​, затем обрабатывает file1 - на 1-я строка проверяет, какие поля являются общими, и сохраняет эти номера полей в другом массиве nf , который затем используется в качестве ссылки для выборочной печати соответствующих столбцов.

3
27.01.2020, 23:14

Если выполнить задачу онлайн:

cut -d' ' -f $(
    echo $(
        head -1 file1 | tr ' ' '\n' |
        grep -nxf <(tr ' ' '\n' <file2) |
        cut -d: -f1
        ) |
    tr ' ' ','
) file1

Или с комментарием Тора

cut -d' ' -f $(
    head -1 file1 | tr ' ' '\n' |
    grep -nxf <(tr ' ' '\n' <file2) |
    cut -d: -f1 | 
    paste -sd ,
) file1
3
27.01.2020, 23:14

Теги

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