6

我有一个这样的文本文件:

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吗?

4

2 回答 2

10

你当然可以。就是这样:

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

结果:

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

从手册:

降低(str)

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

上层(str)

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


我假设给定您的示例数据,它将至少包含三列,并且您讨论的变量组件适用于包含单词之后的列。如果我错了,您可以简单地添加条件:

awk 'NF>1 { $2 = toupper($2) }1' file
于 2012-12-24T14:30:11.650 回答
0
perl -F -ane '$F[1] = lc($F[1]);print "@F"' your_file
于 2012-12-24T18:37:48.133 回答