awk与split相反

awk与split相反,awk,Awk,在awk中,与split()相反的是什么? 假设我有一个包含字符/整数的数组 我所尝试的: 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", joine

awk
中,与
split()
相反的是什么? 假设我有一个包含字符/整数的数组

我所尝试的:

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);
这当然是错误的

更新: 很酷,以以下代码结束(受答案中的连接函数启发):

color=“#FFFF00”;
printf(“原稿颜色:%s\n”,颜色);
拆分(颜色、字符“”);
加入=”;

因为(i=1;i你想要的(在你的循环中)是。

知道
split()
的对立面是
join()
,一个简单的谷歌搜索给了我这个页面,它似乎包含了解决方案:。它将数组的所有元素连接在一起,并返回相应的字符串

['f','o','o'] => "foo"

玩得开心

这里有一个解决方案,它不依赖于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

我还清理了printf的错误使用和伪分号。

以下是POSIX Awk的一种方法:

br = "red,orange,yellow,green,blue"
ch = split(br, de, ",")
print "original: " br
printf "joined: "
for (ec in de) printf ec == ch ? de[ec] "\n" : de[ec] "-"
输出:

original: red,orange,yellow,green,blue
joined: red-orange-yellow-green-blue

正确,但是我无法将我的代码以某种方式使用它,因为我不想直接打印,而是想保持结果的有效性。有几件事:
中的
”字符[I]
上面的方法没有任何作用。虽然上面的方法适用于数组中的单个字符,但一般来说,这不是实现这一点的方法。在这样的数组上使用length()是GNU awk特有的。去掉null语句(后面的分号).printf是一个内置的函数,它的概要是
printfmt,data
,而不是一个函数,因此printf(stuff)不会做你认为它能做的事情。我将发布一些简单的东西,可以做你想做的事情,但在一般情况下。啊——对。
sep
“”
first time through.Nice。链接页面指的是自己编写一个函数。应该接受其中一个实际包含内嵌指令的答案(gnu.org在编写时已关闭)。对我来说,在FreeBSD的awk中,这(1)要求在最后一行的内联条件周围加上括号,以及(2)打印换行后的第一个字段。我认为失败是因为awk不能保证数组元素按顺序处理。请使用
for(I=1;I
br = "red,orange,yellow,green,blue"
ch = split(br, de, ",")
print "original: " br
printf "joined: "
for (ec in de) printf ec == ch ? de[ec] "\n" : de[ec] "-"
original: red,orange,yellow,green,blue
joined: red-orange-yellow-green-blue