Как объединить столбец из нескольких текстовых файлов?
Я хочу извлечь и объединить определенный столбец из набора текстовых файлов в один файл, как показано на рисунке.
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
отсортировать вывод.