我有一个文件,其内容如下:
t_chaos_m_quartz_locks
t_chaos_m_quartz_blob_triggers
t_chaos_m_quartz_calendars
我想改为^t_chaos_m_quartz_[a-z]
,t_chaos_m_quartz_[A-Z]
我曾尝试过这个:
awk -F "t_chaos_m_quartz" '{print $FS toupper($2)}' tmp2
输出:(我认为 FS 表示分隔符 t_chaos_m_quartz,但它打印整个)
t_chaos_m_quartz_locks _LOCKS
t_chaos_m_quartz_blob_triggers _BLOB_TRIGGERS
t_chaos_m_quartz_calendars _CALENDARS
以及:(受到的启发tr -t [a-z][A-Z]
,直到它把一切变成资本)
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
最奇怪的是:(我找不到描述输出的方法)
cat tmp2 | tr -t t_chaos_m_quartz[a-z] [A-Z]
NISXQEFIHIJKQMNOIlES]F
NISXQEFIHIJKQMNOIRlERINMYWWUMF
NISXQEFIHIJKQMNOISQlUnTQMF
请说明如何获得:(并请尝试解释为什么以上有它们的输出)
t_chaos_m_quartz_LOCKS
t_chaos_m_quartz_BLOB_TRIGGERS
t_chaos_m_quartz_CALENDARS
答案1
只需删除美元符号FS
即可使其起作用:
awk -F "t_chaos_m_quartz" '{print FS toupper($2)}' tmp2
为啥不起作用$FS
?
当您在前面添加美元符号时FS
,awk
它会将其解释为位置参数:
位置变量不是特殊变量,而是由美元符号触发的函数
也就是说,$FS
不返回FS
的值,而是被解释为$0
并输出整行。
在中使用变量时awk
,只需使用其名称即可引用它们。
答案2
从小写转换为大写的唯一方法是使用名为 toupper 的函数。
如果您仅转换单个字母,则以下代码将有效:
char_to_upper = toupper(char)