printf具有多个变量扩展+剪切

时间:2015-07-09 16:52:00

标签: bash printf cut

我正在尝试使用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列格式。希望这会使问题更加清晰。

1 个答案:

答案 0 :(得分:2)

如果可能,请尝试从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, $1, $2 }' <<< "${dcarray[$i]}"

# outputs:
   [123] - info1  - info2