заменить строчную букву на заглавную в столбце таблицы

В дополнение к «решению / обходному пути» Джеффа Шаллера, правильным решением, похоже, является информирование среды о копипасте, со стороны отправителя и со стороны получателя, что известно как «режим вставки в скобках».
Из https://cirw.in/blog/bracketed-paste , вот небольшой фрагмент, объясняющий немного больше:

В итоге:

  1. Включить вставка в квадратных скобках: printf "\ e [? 2004h"
  2. Дождитесь начала вставки: вы увидите \ e [200 ~ на STDIN.
  3. Дождитесь остановки вставки: вы увидите \ e [201 ~ на STDIN.
  4. Отключить вставку в скобках: printf "\ e [? 2004l"

Это еще не полностью доступно для Bash, поэтому я приму ответ Джеффа Шаллера, который мне подходит.

-1
07.10.2018, 16:36
2 ответа

awkмогу сделать это за вас:

awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,Sylvain,team:::admin
52,01    dec   2018,Sonia,team
52,01    dec   2018,Sonia,team
25,01    jan   2019,Sonia,team
10,01 jan 2019,Sylvain,team:::admin
8,12    jun   2018,Öle,team:support

Функция substrимеет следующий формат substr(s, a, b), она возвращает b символов из строки s, начиная с позиции a. Параметр b является необязательным. Он может разделить строку символов заданной длины. Здесь используется только первый символ третьего поля, функция substrпринимает начальную строку, первый базовый индекс первого символа для извлечения и количество символов для извлечения. Если этот последний аргумент отсутствует, substrпринимает все оставшиеся символы строки.

Сказав это, substr($3,1,1)будет вычисляться до первого символа $3, а substr($3,2)до остальных.

Чтобы удалить лишние ненужные символы, вы можете направить вывод в sed, а затем в column, чтобы настроить длину столбцов

awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file | sed -e 's/,/\t/g' -e 's/:/ /g' | awk '{print $1, $2","$3","$4"  "$5" " $6" " $7" "$8}' | column -t
CREDITS  EXPDATE,USER,GROUPS
99       01,jun,2018          Sylvain  team  admin
52       01,dec,2018          Sonia    team
52       01,dec,2018          Sonia    team
25       01,jan,2019          Sonia    team
10       01,jan,2019          Sylvain  team  admin
8        12,jun,2018          Öle      team  support
1
28.01.2020, 05:09

Я не думаю, что нужно много трубок, как в предложении Горо; это должно быть выполнимо в одном скрипте awk, за которым следует column, если это необходимо, только:

awk '
    {gsub (/[   ]+/, "/", $2)
     $3 = toupper(substr($3,1,1)) substr($3,2)
     gsub (/,/, "\t")
     gsub (/:+/, " ")
    }
1

' FS=, OFS=, file
CREDITS EXPDATE USER    GROUPS
99      01/jun/2018 Sylvain team admin
52      01/dec/2018 Sonia   team
52      01/dec/2018 Sonia   team
25      01/jan/2019 Sonia   team
10      01/jan/2019 Sylvain team admin
8       12/jun/2018 öle team support
0
28.01.2020, 05:09

Теги

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