分开对面的awk

Pet*_*vic 5 awk

与此相反的split()awk什么?想象一下,我有数组包含字符/整数.

我尝试过的:

color = "#FFFF00";
printf("color original: %s\n", color);
split(color, chars, "");
joined = "";
for (i=1; i <= length(chars); i++) {
    joined = joined + chars[i];
}
printf("color joined: %s\n", joined);
Run Code Online (Sandbox Code Playgroud)

但输出是:

color original: #FFFF00
color joined: 0
Run Code Online (Sandbox Code Playgroud)

这当然是不正确的.

更新: 很酷,最后得到以下代码(灵感来自答案中的连接功能):

color = "#FFFF00";
printf("color original: %s\n", color);
split(color, chars, "");
joined = "";
for (i=1; i <= length(chars); i++) {
    joined = joined "" chars[i];
}
printf("color joined: %s\n", joined);
Run Code Online (Sandbox Code Playgroud)

诀窍是+在加入东西时不使用标志

Ed *_*ton 10

这是一个不依赖于gawk或知道数组长度的解决方案,如果您愿意,可以在每个数组元素之间放置一个分隔符(在本例中为空格)字符串:

color = "#FFFF00"
printf "color original: %s\n", color
split(color, chars, "")
joined = sep = ""
for (i=1; i in chars; i++) {
    joined = joined sep chars[i]
    sep = " "     # populate sep here with whatever string you want between elements
}
printf "color joined: %s\n", joined
Run Code Online (Sandbox Code Playgroud)

我还清理了printf和假冒冒号的错误使用.

  • 啊 - 对.`sep`是第一次通过.尼斯. (2认同)

小智 6

使用GNU awk 4.1

#!/usr/bin/awk -f
@include "join"
BEGIN {
  split("#FFFF00", chars, "")
  print join(chars, 1, length(chars), SUBSEP)
}
Run Code Online (Sandbox Code Playgroud)

awk保存修改到位


小智 -3

知道相反的split()join(),仅仅谷歌搜索就给了我这个页面,其中似乎包含解决方案:http ://www.gnu.org/software/gawk/manual/html_node/Join-Function.html 。它将数组的所有元素连接在一起,并返回相应的字符串。

['f','o','o'] => "foo"
Run Code Online (Sandbox Code Playgroud)

玩得开心

  • 链接页面指的是自己写一个函数。应该接受实际上包含内嵌指令的答案之一(gnu.org 在撰写本文时已关闭)。 (6认同)