如何用awk调整数据集第二列大小写?现有命令无法生效
问题分析与解决方案
问题描述
尝试用awk处理emp.txt数据集,将第二列(M_NAME)转为首字母大写、其余字母小写的格式,但执行命令后未达到预期效果。
执行的错误命令
awk 'BEGIN{FS=","}NR>1{tolower(substr($2,2))} {print $0}' emp.txt
原始数据
M_ID,M_NAME,DEPT_ID,START_DATE,END_DATE,Salary M001,Richa,D001,27-Jan-07,27-Feb-07,150000 M002,Nitin,D002,16-Feb-07,16-May-07,40000 M003,AJIT,D003,8-Mar-07,8-Sep-07,70000 M004,SHARVARI,D004,28-Mar-07,28-Mar-08,120000 M005,ADITYA,D002,27-Apr-07,27-Jul-07,40000 M006,Rohan,D004,12-Apr-07,12-Apr-08,130000 M007,Usha,D003,17-Apr-07,17-Oct-07,70000 M008,Anjali,D002,2-Apr-07,2-Jul-07,40000 M009,Yash,D006,11-Apr-07,11-Jul-07,85000 M010,Nalini,D007,15-Apr-07,15-Oct-07,9999
预期输出
M_ID,M_NAME,DEPT_ID,START_DATE,END_DATE,Salary M001,Richa,D001,27-Jan-07,27-Feb-07,150000 M002,Nitin,D002,16-Feb-07,16-May-07,40000 M003,Ajit,D003,8-Mar-07,8-Sep-07,70000 M004,Sharvari,D004,28-Mar-07,28-Mar-08,120000 M005,Aditya,D002,27-Apr-07,27-Jul-07,40000 M006,Rohan,D004,12-Apr-07,12-Apr-08,130000 M007,Usha,D003,17-Apr-07,17-Oct-07,70000 M008,Anjali,D002,2-Apr-07,2-Jul-07,40000 M009,Yash,D006,11-Apr-07,11-Jul-07,85000 M010,Nalini,D007,15-Apr-07,15-Oct-07,9999
错误原因
原命令仅计算了转换后的子串,但未将结果赋值回第二列,导致原数据没有任何修改,输出与原始内容一致。
修正后的命令
awk 'BEGIN{FS=OFS=","} NR>1 { $2 = toupper(substr($2,1,1)) tolower(substr($2,2)) } { print $0 }' emp.txt
命令解释
FS=OFS=",":同时设置输入和输出字段分隔符为逗号,保证输出格式与输入一致。toupper(substr($2,1,1)):提取第二列首字符并转为大写。tolower(substr($2,2)):提取第二列从第2个字符开始的所有内容并转为小写。- 将两部分拼接后重新赋值给
$2,修改后的字段会同步到最终输出中。
内容的提问来源于stack exchange,提问作者Faisal
相关产品推荐
相关产品推荐

