gpt4 book ai didi

awk - RS 可以设置 "empty"将字符串字符拆分为记录吗?

转载 作者:行者123 更新时间:2023-12-04 11:02:03 25 4
gpt4 key购买 nike

awk 中是否有一种方法(最有可能是 gawk)来设置记录分隔符 RS将空值作为单独的记录处理字符串的每个字符?有点像设置 FS清空以在其自己的字段中分隔每个字符:

$ echo abc | awk -F '' '{print $2}'
b

但要将它们作为单独的记录分开,例如:
$ echo abc | awk -v RS='?' '{print $0}'
a
b
c

最明显的一个:
$ echo abc | awk -v RS=''  '{print $0}'
abc

没有奖励我(因为根据 GNU awk documentation,那个显然是为了别的东西)。

我基本上坚持使用 for等等。?

编辑 :

@xhienne 的答案是我一直在寻找的,但即使使用它(20 个字符和一个有问题的变量 A :):
$ echo  abc | awk -v A="\n" -v RS='(.)' -v ORS="" '{print(RT==A?NR:RT)}'
abc4

不会帮助我缩短我之前的 code使用 length .再说一次,我怎么能赢得 Pyth 代码: +Qfql+Q :D。

最佳答案

如果您只想每行打印一个字符,@klashxx 的回答是可以的。但是一个sed 's/./&\n/g'因为你在打高尔夫球,所以会更短。

如果您真的想为每个角色单独记录,我为您找到的最佳解决方案是:

echo -n abc | awk -v RS='(.)' '{ print RT }'

(使用 gawk ;您的输入字符在 RT 中,而不是 $1 )

[更新] 如 RS设置为空字符串,表示为 awk记录由空行分隔。如果我刚刚定义了 RS='.' ,记录分隔符只是一个点(即固定字符串)。但是如果它的长度超过一个字符, gawk的一个特征正在考虑 RS作为正则表达式。所以,我在这里所做的就是给 gawk一个正则表达式,表示“每个字符”作为记录分隔符。我使用了 gawk 的另一个功能: 检索与特殊变量 RT 中的正则表达式匹配的字符串(记录终结者)

这是 gwak的相关部分手动的:

Normally, records are separated by newline characters. You can control how records are separated by assigning values to the built-in variable RS. If RS is any single character, that character separates records. Otherwise, RS is a regular expression. Text in the input that matches this regular expression separates the record.

If RS is set to the null string, then records are separated by blank lines.

Gawk sets RT to the input text that matched the character or regular expression specified by RS.

关于awk - RS 可以设置 "empty"将字符串字符拆分为记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41299919/

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