Использование awk для выбора данных столбцов из отдельных файлов

Вы можете попробовать трубопровод через Команда SED , которая заменяет начало линии ( ^ ) с любым префиксом, который вы хотите ( | ), например:

some_command | sed 's/^/| /'

Это будет работать для более простых команд, но Появит неудачу как более сложные приложения, позиционируйте курсор у некоторых нетривиальных способов, и также будут задерживать выходных данных нескольких команд (поскольку они переключаются из буферизации линий для использования гораздо большего буфера, увидев их стандартный вывод не является терминалом).

Я, как правило, рекомендую бросить этот подход, а вместо этого настроить подсказку оболочки, который выделяется (использует жирный, курсивый, цвет, цвет фона, специальные символы Unicode, что бы ни происходит).

-1
10.08.2015, 09:07
2 ответа

Нет необходимости использовать awk для задачи

join --nocheck-order -o 1.2,2.4 file1 file2

или

paste file1 file2 | tr -s ' ' '\t' | cut -f2,6
0
28.01.2020, 05:13

Когда вы сначала даете имена файлам одно за другим, он считает все столбцы из файла1, а затем начинает отсчет от следующего числа до файла2. Это означает, что он считает 2 столбца файла 1 и начальный столбец 3,4,5 .... и так далее файла 2.

Чтобы получить столбец 4 файла 2, вам нужно написать $ 6 , потому что команда начинает отсчет с 3 в файле 2.

Это даст вам желаемый результат (замените $ 6 другим числом, если вы хотите напечатать любой другой столбец из файла2):

paste file1 file2 | awk '{print $2 " " $6}' > outputfile.txt

Другой способ (Здесь $ 4 означает столбец 4 файла2):

paste <(awk '{print $2}' file1) <(awk '{print $4}' file2) > outputfile.txt

Вывод:

0.00    35.8909

1.13    33.6108

1.60    38.8434

Ниже приводится чистое решение awk :

awk 'NR==FNR{a[NR]=$2; next} {print a[FNR], $4}' file1 file2 > outputfile.txt
0
28.01.2020, 05:13

Теги

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