代码之家  ›  专栏  ›  技术社区  ›  MOHAMED

如何在shell中的两个字符之间添加逗号

  •  2
  • MOHAMED  · 技术社区  · 5 年前

    我输入了一个包含1个大写字母的字符串或一个包含2个大写字符的字符串 下面是输入字符串的示例:

    AB
    AN
    FG
    K
    M
    

    我想执行一个shell命令/函数,将输入字符串转换为由逗号“,”分隔的2个小写字母(如果输入是2个大写字母)或1个小写字母

    上述示例的输出

    a,b
    a,n
    f,g
    k
    m
    

    我试过这个

    (echo -n "${s:0:1}" && [ "${s,1:1}" != "" ] && echo -n ",${s:1:1}") | tr [A-Z] [a-z]
    

    但我认为使用sed/awk有最简单的解决方案

    0 回复  |  直到 3 年前
        1
  •  2
  •   anubhava    5 年前

    你可以使用这个awk:

    awk 'BEGIN{FS=""; OFS=","} {$0 = tolower($0); $1=$1} 1' file
    

    a,b
    a,n
    f,g
    k
    m
    

    细节:

    • FS="" :使用空字段分隔符将每个字符分隔为单独的字段
    • OFS="," :使用输出字段分隔符作为 ,
    • $0 = tolower($0) :所有大写字符小写
    • $1=$1 :武力 awk 使用以下命令重写每条记录 OFS 价值
    • 1 :打印每条记录

    替代解决方案:

    如果你 awk 不支持 FS=“” (空字段分隔符),使用以下解决方案:

    awk -v OFS=, '{$0 = tolower($0); gsub(/[a-z]/, "&,"); sub(/,$/, "")} 1' file
    
        2
  •  2
  •   RavinderSingh13 Nikita Bakshi    5 年前

    你能试试下面的吗。

    awk '{$0=tolower($0);gsub(/[a-z]/,"&,");sub(/,$/,"")} 1' Input_file
    

    说明: 首先将整行转换为小写字母 tolower 然后在全球范围内用字母替换每个字母 , .最后替换最后出现的 , 然后用NULL表示 1 打印编辑后的行。

    第二种解决方案: 使用GNU sed :

    sed 's/[[:alpha:]]/\L&,/g;s/,$//' Input_file
    
        3
  •  1
  •   vgersh99    5 年前

    如果你 awk gawk ... awk -v FS='' '$0=tolower($0) {$1=$1}1' OFS=',' myFile

    推荐文章