具有多个变量扩展 + 削减的 printf

printf with multiple variable expansions + cuts

我正在尝试使用 printf 扩展一个变量(一个长逗号分隔的字符串)并从字符串中删除某些字段。我可以只打印一个字段,但我似乎无法弄清楚添加另一个剪切的语法。

变量可能看起来像这样:blah1,blah2,blah3,...,blah7

这个例子有效:

printf '%26s%-40s%s\n' '['$SELECT$i$RESET'] - ' ${dcarray[$i]} | cut -d"," -f1

现在我想包括字段 1 和 7,或 1 和 6,等等。

printf '%26s%-40s%-20s%-20s%s\n' '['$SELECT$i$RESET'] - ' ${dcarray[$i]} | cut -d"," -f1 ${dcarray[$i]} | cut -d"," -f7

这太吓人了。我需要以某种方式将它们括在引号中。想法?

也许我应该只展开一次变量并打印我需要的两个字段。

更新

稍微解释一下。
数组"dcarray"有URL、地区、用户、其他等信息,全部用逗号分隔:

dcarray[1]="name,region,URL,other,...,etc"

脚本后面的 printf 语句打印出每个数组元素(例如):

[1] - US-TEXAS-1
[2] - US-TEXAS-2
[3] - US-TEXAS-3

新增加的内容如下:

[1] - US-TEXAS-1 - other info
[2] - US-TEXAS-2 - other info
[3] - US-TEXAS-3 - other info

我想我其实有两个问题。我仍然无法将其他信息字段输出到它自己的列中。我认为部分问题是因为我也弄乱了 printf 列格式。希望这能让问题更清楚一些。

如果可能,请尝试从 cut 切换到 awk

SELECT=1;
i=2;
RESET=3;
dcarray[$i]="info1,info2"

awk -F, -v var="[$SELECT$i$RESET] -" '{ printf "%10s %-6s - %-6s\n", var, ,  }' <<< "${dcarray[$i]}"

# outputs:
   [123] - info1  - info2