Могу ли я публиковать -размеры вкладок столбцов формата, чтобы интервалы были наименьшим общим знаменателем в Linux?

У меня была та же проблема, и я понял, что bindkey "^K"возвращает "^K" self-insertв tmux и "^K" kill-lineв противном случае. После явного добавления

bindkey \^K kill-line

на мой .zshrcработает

0
01.11.2021, 10:55
1 ответ

Относительно «или sed» в вашем вопросе -sed — это правильный инструмент для использования для простых преобразований s/old/new/ в отдельных строках, то, что вы делаете, не имеет ничего подобного, поэтому sed не должен даже будет вариант рассмотреть.

Использование подхода за 2 -прохода, сначала для определения максимальной ширины и выравнивания для каждого столбца, а затем для их использования при печати с использованием любого awk в любой оболочке на каждом компьютере Unix:

$ cat tst.awk
BEGIN { FS="\t" }
NR==FNR {
    for (i=1; i<=NF; i++) {
        align[i] = ( $i ~ /^[0-9]+$/ ? "" : "-" )
        width[i] = ( length($i) > width[i] ? length($i) : width[i] )
    }
    next
}
{
    for (i=1; i<NF; i++) {
        printf "%" align[i] width[i] "s ", $i
    }
    print $NF
}

$ awk -f tst.awk file file
drwxr-xr-x 755  4 boss boss  4096 2021-10-29 22:49:12.
drwxr-xr-x 755  4 boss boss  4096 2021-10-29 22:49:12.
drwxr-xr-x 755 36 boss boss  4096 2021-11-01 11:30:24..
-rw-r--r-- 644  1 boss boss 97708 2021-11-01 11:30:16.custom
-rw-r--r-- 644  1 boss boss  4013 2021-10-11 22:04:04.custom-dk

Вышеприведенное предполагает, что ваш последний столбец всегда должен быть выровнен по левому краю -. Если это не так, сообщите нам об этом, так как в любом случае это несложно. Также предполагается, что выравнивание для столбца может быть определено значениями (числовыми или нет )в полях в последней строке ввода.

Если ввод должен поступать из канала, а не из файла (, и поэтому вы не можете открыть ввод дважды ), вы можете сохранить ввод в массиве и вывести его в разделе END :

. ]
$ cat tst.awk
BEGIN { FS = "\t" }
{
    for (i=1; i<=NF; i++) {
        width[i] = ( length($i) > width[i] ? length($i) : width[i] )
        align[i] = ( $i ~ /^[0-9]+$/ ? "" : "-" )
        vals[NR,i] = $i
    }
}
END {
    for (n=1; n<=NR; n++) {
        for (i=1; i<NF; i++) {
            printf "%" align[i] width[i] "s ", vals[n,i]
        }
        print vals[n,NF]
    }
}

, а затем назовите его:

$ stat --printf="%A\t%a\t%h\t%U\t%G\t%s\t%.19y\t%n\n"..* | awk -f tst.awk
1
01.11.2021, 13:43

Теги

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