POSIX-эквивалент столбца -t

Используйте хеш-карту для сбора всех уникальных файлов. Хэш зависит от содержимого, поэтому только файлы с уникальным содержимым получают запись в хеш-карте.

declare -A unique_files
for file in *; do 
    unique_files["$(md5sum "$file" | cut -d ' ' -f 1)"]="$file"
done
echo "${unique_files[@]}"
5
02.08.2020, 20:09
3 ответа

prделает многое из того, что делает column. Если вы укажете фактическую командную строку, мы можем работать над заменой.

NAME pr - convert text files for printing

SYNOPSIS pr [OPTION]... [FILE]...

DESCRIPTION Paginate or columnate FILE(s) for printing.

Для вашего конкретного случая вы можете использоватьawk:

awk '{printf("%2s %30s %10s", $1, $2, $3);}' file.txt

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

4
18.03.2021, 23:15

Насколько мне известно, прямого эквивалента columnсреди набора утилит POSIX нет.

Возможным (дешевым )решением POSIX может быть:

$ tr -s ' ' '\n' <<"EOT" | pr -3 -a -t
1   SMALL   000a
2   VERY_VERY_VERY_VERY_LONG    000b
3   SMALL   000c
EOT
1                       SMALL                   000a
2                       VERY_VERY_VERY_VERY_LON 000b
3                       SMALL                   000

После копирования/вставки поля ваших образцов данных были разделены пробелами. В случае, если они действительно разделены одним TAB, вы можете использовать tr '\t' '\n'.

Конечно, это предполагает, что все входные строки имеют одинаковое количество полей. Довольно очевидным недостатком является то, что столбцы имеют одинаковый размер, из-за чего они выглядят значительно хуже, чем вывод column -t.

Кроме того, как показано в приведенном выше примере, prиспользует фиксированную длину для строк (, по умолчанию 72 символа ), и обрезает поля, которые не помещаются в ширину их столбца. Затем может потребоваться явная установка ширины страницы(-w)на подходящее значение.

3
18.03.2021, 23:15

POSIX предпочитает систематизировать существующее поведение и предписывать новые функции или функции, которые не получили широкого распространения, только если существующее поведение неудовлетворительно. В настоящее время не так много требований к представлению данных с использованием неформатированного текста в шрифтах с фиксированной шириной -, так что columnвряд ли станет обязательным. В отличие от pr, это из BSD, в нем нет System V и других исторических унифицированных систем, поэтому он не унаследован.

Как и любую другую текстовую утилиту, вы можете выразить ее в awk с умеренным объемом работы. Вот минимально протестированная реализация column -t. Параметр Awk -vпохож на column-sв простых случаях (с одним символом ).

#!/usr/bin/env awk
{
    if (max_column < NF) max_column = NF;
    for (i = 1; i <= NF; i++) {
        if (width[i] < length($i)) width[i] = length($i);
        data[NR, i] = $i;
    }
}
END {
    for (i = 1; i < max_column; i++) format[i] = sprintf("%%-%ds  ", width[i]);
    format[max_column] = "%s\n";
    for (k = 1; k <= NR; k++) {
        for (i = 1; i <= max_column; i++) printf format[i], data[k, i];
    }
}
5
18.03.2021, 23:15

Теги

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