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

Jam*_*own 7 awk gawk

有没有办法在awk-gawk中最有可能将记录分隔符设置RS为空值,以将字符串的每个字符作为单独的记录处理?有点像设置FS为空以分隔其自己的字段中的每个字符:

$ echo abc | awk -F '' '{print $2}'
b
Run Code Online (Sandbox Code Playgroud)

但要将它们分别作为单独的记录分开,例如:

$ echo abc | awk -v RS='?' '{print $0}'
a
b
c
Run Code Online (Sandbox Code Playgroud)

最明显的一个:

$ echo abc | awk -v RS=''  '{print $0}'
abc
Run Code Online (Sandbox Code Playgroud)

没有奖励我(因为那个显然是为了每个GNU awk文档的其他东西).

我基本上卡住使用for等?

编辑:

@ xhienne的回答是我正在寻找的,但即使使用它(20个字符和一个可疑的变量A:):

$ echo  abc | awk -v A="\n" -v RS='(.)' -v ORS="" '{print(RT==A?NR:RT)}'
abc4
Run Code Online (Sandbox Code Playgroud)

不会帮我缩短我之前使用的代码length.然后,我怎么能赢得Pyth代码+Qfql+Q:: D.

xhi*_*nne 5

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

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

echo -n abc | awk -v RS='(.)' '{ print RT }'
Run Code Online (Sandbox Code Playgroud)

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

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

以下是gwak手册的相关部分:

通常,记录由换行符分隔。您可以通过为内置变量 RS 分配值来控制记录的分隔方式。如果 RS 是任何单个字符,则该字符将分隔记录。否则,RS 是一个正则表达式。输入中与此正则表达式匹配的文本分隔记录。

如果 RS 设置为空字符串,则记录由空行分隔。

Gawk 将 RT 设置为与 RS 指定的字符或正则表达式匹配的输入文本。