bash逗号分隔值的反向顺序

Dej*_*jwi 7 bash

我有以下元素列表:

a, b, c, 1337, d, e
Run Code Online (Sandbox Code Playgroud)

我希望我有:

e, d, 1337, c, b, a
Run Code Online (Sandbox Code Playgroud)

我怎样才能在bash中实现这一目标?

sam*_*hen 5

你可以这样做awk

#!/bin/bash

awk 'BEGIN{FS=",[ ]*"; OFS=", "}
    {
        for (i=NF; i>0; i--) {
            printf "%s", $i;
            if (i>1) {
                printf "%s", OFS;
            }
        }
        printf "\n"
    }'
Run Code Online (Sandbox Code Playgroud)

脚本说明

  • FS=",[ ]*";字段分隔符(输入的分隔符)的正则表达式匹配逗号后跟零个或多个空格,因此您的输入可以是以下任何一项:
    • a, b, c, 1337, d, e
    • a,b,c,1337,d,e
    • a, (many spaces) b, c,1337,d, e
  • OFS=", "输出字段分隔符输出的分隔符)将明确是一个逗号后跟一个空格(因此输出看起来一致)
  • for (i=NF; i>0; i--) { ... }:NF表示当前行中的字段数。这里我们向后迭代,从最后一个字段打印到第一个字段。
  • if (i>1) { ... }:OFS如果它不是输出中的最后一个字段,则仅打印
  • printf "\n": 新队。

示例用法

$ ./script_name < input_file > output_file
Run Code Online (Sandbox Code Playgroud)