用awk将某些单词小写

用awk将某些单词小写,awk,Awk,目标:字段1中只有符合“^[A-Z][A-Z]+$”的小写单词。字段由制表符分隔。 输入: Agne XXX Agn_Ball YYY 输出: agne XXX Agne_Ball YYY 代码: 因此,如何修改命令以获得结果。您非常接近,您需要在条件块中使用next,以避免2次打印。下面的awk可能会对您有所帮助 awk '$1 ~ /^[A-Za-z]+$/{$1=tolower($1)} 1' Input_file 或者根据jas在评论中的建议,在此处添加以下内容 awk '

目标:字段1中只有符合“^[A-Z][A-Z]+$”的小写单词。字段由制表符分隔。

输入:

Agne  XXX
Agn_Ball  YYY
输出:

agne  XXX
Agne_Ball  YYY
代码:


因此,如何修改命令以获得结果。

您非常接近,您需要在条件块中使用
next
,以避免2次打印。下面的
awk
可能会对您有所帮助

awk '$1 ~ /^[A-Za-z]+$/{$1=tolower($1)} 1' Input_file
或者根据jas在评论中的建议,在此处添加以下内容

awk '$1 ~ /^[A-Z][a-z]+$/{$1=tolower($1)} 1' Input_file

perl-pe的/^([A-Z][A-Z]+\t)/\l$1/”
@melpomene非常感谢!它起作用了。我觉得现在有必要学习perl。这对于OP的例子来说是非常具体的。我相信OP只给出了这个字符串的一个例子,OP希望对所有匹配的行都这样做。虽然这段代码可能会回答这个问题,但提供关于这段代码为什么和/或如何回答这个问题的额外上下文可以提高它的长期价值。
awk '$1 ~ /^[A-Za-z]+$/{$1=tolower($1)} 1' Input_file
awk '$1 ~ /^[A-Z][a-z]+$/{$1=tolower($1)} 1' Input_file
awk '$1 == "Agne" {print tolower($1),$2}sub(/Agn_/,"Agne_")' OFS="\t" file

agne    XXX
Agne_Ball  YYY