11

の反対は何でしょう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);

ただし、出力は次のとおりです。

color original: #FFFF00
color joined: 0

もちろんそれは正しくありません。

更新: かっこいい、次のコードで終わりました(回答に存在する結合関数に触発されました):

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);

トリックは、+物事を元に戻すときに記号を使用しないことでした

4

5 に答える 5

16

これは、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と偽のセミコロンの誤った使用をクリーンアップしました。

于 2012-11-30T15:57:00.930 に答える
1

POSIXAwkを使用する方法は次のとおりです。

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
于 2016-06-12T15:09:45.700 に答える
0

(ループ内で)必要なのは文字列の連結です。

于 2012-11-30T09:01:42.470 に答える
0

以前の回答と同様で、あまりエレガントではありませんが、簡単で短いです。

color = "#FFFF00"
printf "color original: %s\n", color
split(color, chars, "")
for (i=1; i<=length(chars); i++) {
    (i==1) ? joined = chars[i] : joined = joined" "chars[i] # Define separator here
}
printf "color joined: %s\n", joined
于 2022-01-17T19:40:03.430 に答える
-2

の反対がであることがわかっているsplit()のでjoin()、単なるGoogle検索でこのページが表示されます。このページには解決策が含まれているようです:http ://www.gnu.org/software/gawk/manual/html_node/Join-Function.html 。配列のすべての要素を結合し、対応する文字列を返します。

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

楽しむ

于 2012-11-30T09:01:49.270 に答える