В past posting я спросил о командах в Bash для выравнивания текстовых столбцов друг от друга по строке. Мне стало ясно, что желаемая задача (то есть выравнивание текстовых столбцов разного размера и содержимого по строкам) намного сложнее, чем первоначально предполагалось, и что предлагаемый answer, приемлемый для прошлой публикации, недостаточен для большинства эмпирических данных наборы. Таким образом, я хотел бы запросить сообщество в следующем псевдокоде. В частности, я хотел бы знать, может ли и каким образом оптимизировать следующий псевдокод.Выравнивание текстовых столбцов разного размера и содержимого
Предположим файл с n столбцы строк. Некоторые строки могут отсутствовать, другие могут быть дублированы. Самый длинный столбец не может быть первым, указанным в файле, но должен быть ссылочным столбцом. Порядок строк этого ссылочного столбца должен поддерживаться.
> cat file # where n=3; first row contains column headers
CL1 CL2 CL3
foo foo bar
bar baz qux
baz qux
qux foo
bar
ПСЕВДОКОД попытка 1 (совершенно недостаточно):
Shuffle columns so that columns ordered by size (i.e., longest column is first in matrix)
Rownames = strings of first column (i.e., of longest column)
For rownames
For (colname among columns 2:end)
if (string in current cell == rowname) {keep string in location}
if (string in current cell != rowname) {
if (string in current cell == rowname of next row) {add row to bottom of table; move each string of current column one row down}
if (string in current cell != rowname of next row) {add row to bottom of table; move each string of all other columns one row down}
}
Заказать колонки по размеру:
> cat file_columns_ordered_by_size
CL2 CL1 CL3
foo foo bar
baz bar qux
qux baz
foo qux
bar
Искали выход:
> my_code_here file_columns_ordered_by_size
CL2 CL1 CL3
foo foo
bar bar
baz baz
qux qux qux
foo
bar