gpt4 book ai didi

AWK语句在代码中做循环for将某些字段大写

转载 作者:行者123 更新时间:2023-12-05 08:17:08 25 4
gpt4 key购买 nike

代码

awk '{for(i=1;i<=NF;++i){$i=toupper(substr($i,1,1))tolower(substr($i,2));}print}'

我需要在某些字段中将每个单词的第一个字符大写。这个循环查找行中的所有字符并替换行中的第一个字符,如果它不在字段的第一位,则对行的其余部分执行 tolower 句子。我需要这个循环的一些例子,但是只为某些字段(一个或多个)分配句子请解释答案以及它如何在所有行和字段上工作。

我已经看到没有循环执行此操作。

awk '{print toupper(substr($0,1,1))tolower(substr($0,2))}'

tolower 部分占用所有行,如果我更改某些字段,例如数字 2:

$>  echo 'Aaaa Bbbb Cccc DDDD Eeee Ffff Gggg HHHH'  | awk '{print toupper(substr($0,1,1)) tolower(substr($2,2)) }'

$> Abbb

$0 告诉对第一个字符的所有行执行 toupper,接下来的部分 ($0)(,1,1) 告诉它只针对一个字符,最后指定此操作的长度 (1) 但是tolower部分表示它取自字段2的第二个字符并一起打印(因为语句被粘贴)如果我在其中的某些方面有误,请告诉我,并希望得到理解。

I expect to do the sentence of Toupper of Tolower specifying the field to want to do this.

预期的示例:

只对这个空格中的字段 4 和 8 进行大写,如前所示,或者在其他示例中,如果我有分号分隔字段,如何做到这一点,示例:

>$ echo 'Aaaa Bbbb Cccc DDDD;Eeee Ffff;Gggg HHHH'

在第 1 个字段的第 4 个单词和第 3 个字段的第 2 个单词中执行相同的操作。 (现在字段以分号分隔)

结果:

Aaaa Bbbb Cccc Dddd;Eeee Ffff;Gggg Hhhh

最佳答案

因为 在第 1 字段的第 4 个单词和第 3 个字段的第 2 个单词中执行相同的操作。 以及您问题中的其他答案和其他一些文本和示例表明您想要更改所选分号分隔字段的空格分隔子字段以大写字母开头,然后全部小写,这是一种方法:

$ cat tst.awk
BEGIN {
split(nrs,tmp,/[ .]+/)
for (i=1; i in tmp; i+=2) {
tgtFldNrs[++numTgts] = tmp[i]
tgtSubFldNrs[numTgts] = tmp[i+1]
}
FS = OFS = ";"
subFs = subOfs = " "
}
{
for (tgtNr=1; tgtNr<=numTgts; tgtNr++) {
fldNr = tgtFldNrs[tgtNr]
subFldNr = tgtSubFldNrs[tgtNr]

numSubFlds = split($fldNr,subFlds,subFs)
subFld = subFlds[subFldNr]
subFlds[subFldNr] = toupper(substr(subFld,1,1)) tolower(substr(subFld,2))

fld = subFlds[1]
for (subFldNr=2; subFldNr<=numSubFlds; subFldNr++) {
fld = fld subOfs subFlds[subFldNr]
}
$fldNr = fld
}

print
}

给定这个示例输入:

$ cat file
Aaaa Bbbb Cccc DDDD;Eeee Ffff;Gggg HHHH

告诉 awk 更新字段 1 的子字段 4 (1.4) 和字段 3 的子字段 2 (3.2)(来自 Do the same在第 1 个字段的第 4 个单词和第 3 个字段中的第 2 个单词中 在问题中)它将输出:

$ awk -v nrs='1.4 3.2' -f tst.awk file
Aaaa Bbbb Cccc Dddd;Eeee Ffff;Gggg Hhhh

希望这就是您想要做的,如果不是,请更新您的问题以阐明您的要求并提供更全面的样本输入/输出。

关于AWK语句在代码中做循环for将某些字段大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com