Eu tenho um arquivo com conteúdo assim:
t_chaos_m_quartz_locks
t_chaos_m_quartz_blob_triggers
t_chaos_m_quartz_calendars
Eu gostaria de mudar ^t_chaos_m_quartz_[a-z]
para t_chaos_m_quartz_[A-Z]
, eu tentei isso:
awk -F "t_chaos_m_quartz" '{print $FS toupper($2)}' tmp2
output: (acho que FS significa separador t_chaos_m_quartz, mas imprime o todo)
t_chaos_m_quartz_locks _LOCKS
t_chaos_m_quartz_blob_triggers _BLOB_TRIGGERS
t_chaos_m_quartz_calendars _CALENDARS
e também: (inspirado em tr -t [a-z][A-Z]
, até transformar tudo em capital)
cat tmp2 | tr -t [t_chaos_m_quartza-z] [t_chaos_m_quartzA-Z]
T_CHAOS_M_QUARTZ_LOCKS
T_CHAOS_M_QUARTZ_BLOB_TRIGGERS
T_CHAOS_M_QUARTZ_CALENDARS
o mais estranho é: (não consigo encontrar uma maneira de descrever a saída)
cat tmp2 | tr -t t_chaos_m_quartz[a-z] [A-Z]
NISXQEFIHIJKQMNOIlES]F
NISXQEFIHIJKQMNOIRlERINMYWWUMF
NISXQEFIHIJKQMNOISQlUnTQMF
Por favor, ilustre como ter: (e tente explicar por que acima tem sua saída)
t_chaos_m_quartz_LOCKS
t_chaos_m_quartz_BLOB_TRIGGERS
t_chaos_m_quartz_CALENDARS
A única maneira de converter de minúsculas para maiúsculas é usando uma função chamada toupper.
O código a seguir funcionará se você estiver apenas convertendo uma única letra:
char_to_upper = toupper(char)
Basta remover o cifrão
FS
para que funcione:Por que não
$FS
funciona?Quando você acrescenta um cifrão a
FS
,awk
interpreta-o como um parâmetro posicional :ou seja,
$FS
não retornaFS
o valor de , mas é interpretado como$0
e gera a linha inteira.Ao usar variáveis em
awk
, refira-se a elas simplesmente por seus nomes.