如何使用awk将文件的某个字段更改为大写?

我有这样的文本文件:

1 http http 3 4 5 2 dns dns 4 3 ftp ftp 4 5 6 8 

我想输出是这样的:

 1 HTTP http 3 4 5 2 DNS dns 4 3 FTP ftp 4 5 6 8 

我想把第二个字段从小写变成大写,只有第二个字段。

请注意,某一行中的字段数量不固定。

我可以用awk完成这个目标吗?

Solutions Collecting From Web of "如何使用awk将文件的某个字段更改为大写?"

你当然可以。 就是这样:

 awk '$2 = toupper($2)' file 

结果:

 1 HTTP http 3 4 5 2 DNS dns 4 3 FTP ftp 4 5 6 8 

从手册:

tolower的(STR)

返回字符串str的一个副本,将str中的所有大写字符转换为其对应的小写字母。 非字母字符保持不变。

TOUPPER(STR)

返回字符串str的一个副本,将str中的所有小写字符转换为其对应的大写字母。 非字母字符保持不变。


我做了一个假设,假设你的样本数据至少有三列,而你所讨论的变量组件适用于包含单词的那些列。 如果我错了,你可以简单地添加条件:

 awk 'NF>1 { $2 = toupper($2) }1' file 
 perl -F -ane '$F[1] = lc($F[1]);print "@F"' your_file