用awk降低某些单词

时间:2018-05-28 21:27:55

标签: awk

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

输入:

Agne  XXX
Agn_Ball  YYY

输出:

agne  XXX
Agne_Ball  YYY

代码:

awk -F '\t' 'BEGIN {OFS='\t'} $1 ~ /^[A-Z][a-z]+$/ {print tolower($1),$2}1' < test.tmp > test.tmp2

然而,结果是:

agne XXX
Agne  XXX
Agne_Ball  YYY

所以如何修改命令以获得结果。

2 个答案:

答案 0 :(得分:3)

你非常接近,你需要在条件块中使用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

答案 1 :(得分:0)

awk '$1 == "Agne" {print tolower($1),$2}sub(/Agn_/,"Agne_")' OFS="\t" file

agne    XXX
Agne_Ball  YYY