我有以下元素列表:
a, b, c, 1337, d, e
我希望我有:
e, d, 1337, c, b, a
我怎样才能在 bash 中实现这一目标?
你可以这样做awk
:
#!/bin/bash
awk 'BEGIN{FS=",[ ]*"; OFS=", "}
{
for (i=NF; i>0; i--) {
printf "%s", $i;
if (i>1) {
printf "%s", OFS;
}
}
printf "\n"
}'
解释脚本的:
-
FS=",[ ]*";
: The regex for Field Separator (delimiter for your input) matches a comma followed by zero or more spaces, so your input can be any of:
-
a, b, c, 1337, d, e
a,b,c,1337,d,e
a, (many spaces) b, c,1337,d, e
-
OFS=", "
: The 输出字段分隔符(输出的分隔符)将显式为逗号后跟空格(因此输出看起来一致)
-
for (i=NF; i>0; i--) { ... }
: NF
意味着字段数在当前行中。这里我们向后迭代,从最后一个字段打印到第一个字段。
-
if (i>1) { ... }
: 只打印OFS
如果它不是输出中的最后一个字段
-
printf "\n"
: 新队。
使用示例:
$ ./script_name < input_file > output_file
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)