Как объединить столбец из нескольких текстовых файлов?

Я хочу извлечь и объединить определенный столбец из набора текстовых файлов в один файл, как показано на рисунке.

File1_example.txt

A   123   1
B   234   2
C   345   3
D   456   4

File2_example.txt

A   123   5
B   234   6
C   345   7
D   456   8

File3_example.txt

A   123   9
B   234   10
C   345   11
D   456   12

...

..

,

File100_example.txt

A   123   55
B   234   66
C   345   77
D   456   88

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

1   5   9   ...  55
2   6   10  ...  66
3   7   11  ...  77
4   8   12  ...  88

3 ответа

Попробуй это:

paste File[0-9]*_example.txt | awk '{i=3;while($i){printf("%s ",$i);i+=3}printf("\n")}'

Пример:
File1_example.txt:

A   123   1
B   234   2
C   345   3
D   456   4

File2_example.txt:

A   123   5
B   234   6
C   345   7
D   456   8

Запустите команду как:

$ paste File[0-9]*_example.txt | awk '{i=3;while($i){printf("%s ",$i);i+=3}printf("\n")}'

Выход:

1 5 
2 6 
3 7 
4 8

Когда catПоскольку вам необходимо убедиться, что порядок файлов сохранен, один из способов - явно указать файлы

cat File{1..100}_example.txt | awk '{print $NF}' | pr 4ts' '

извлечь последний столбец awk и выровнять, используя pr

Я тестировал приведенный ниже код с первыми 3 файлами

cat File*_example.txt  | awk '{a[$1$2]= a[$1$2] $3 " "} END{for(x in a){print a[x]}}' | sort

1 5 9
2 6 10
3 7 11
4 8 12

1) использовать массив awk, a[$1$2]= a[$1$2] $3 " " index: column1 и column2, к значению массива добавляется весь столбец 3.

2) END{for(x in a){print a[x]}} пересеченный массив a и печатает все значения.

3) использовать sort отсортировать вывод.

Другие вопросы по тегам