Я хочу извлечь определенный столбец из файла, номер столбца указан в другом файле с помощью сценариев оболочки?

Просто примечание :, чтобы получить вывод «сторона -на сторону -», вам нужно «--цвет=всегда». Вы также можете разбить его на страницы с меньшим количеством страниц и сохранить цветной вывод :

.
diff -y --color=always file1 file2 | less -R

И еще один совет: :старайтесь оставить переключатель «--color=always» в конце. Причина? С помощью dmesg из утилиты -linux 2.27.1:

dmesg --human --color=always | less -R    # works
dmesg --color=always --human | less -R    # doesn't work
2
22.01.2020, 10:22
2 ответа

СPerl:

perl -pale '$"="\t";
   chomp(@A = map { $_-1 } grep { /^[1-9]\d*$/m } <STDIN>) if $. == 1;
   $_ = @A ? "@F[@A]" : last;
' File1 < File2

Результат:

2   4   5
25  2   4
12  15  17

Пояснение:

Дайте файлу номеров столбцов (один номер столбца на строку )в стандартном вводе для утилиты perl и файл данных в командной строке Perl.

Установите для конкатенатора элементов массива($")значение TAB, чтобы все поля вывода были разделены табуляцией -.

Выйти из программы, как только обнаружим, что массив столбцов для печати @Aпуст. Он содержит только те строки из File2, которые содержат одно положительное целое число в строке. любая другая комбинация отклоненный.

1
27.01.2020, 21:57

Попробуйте также

awk '
FNR == NR       {COL[NR] = $1                   # get column numbers from file2
                 MX = NR                        # retain max line No. in file2
                 next
                }
                {for (i=1; i<=MX; i++)  printf "%s%s", $(COL[i]), (i==MX)?ORS:OFS
                                                # print those columns, and field
                                                # or line separator
                }
' file2 file1
2 4 5
25 2 4
12 15 17
3
27.01.2020, 21:57

Теги

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