具有多个变量扩展 + 削减的 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
我正在尝试使用 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