在输入字符串的示例之后,这里有一个带有大写字母的字符串或两个大写字母的字符串:
AB
AN
FG
K
M我希望执行一个shell命令/函数,该命令/函数将输入字符串转换为两个小写字母,用逗号“、”(如果输入是两个大写字母)或一个小写字母(如果输入是一个大写字母)
上述示例的输出
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有最简单的解决方案。
发布于 2020-06-19 16:41:18
您可以使用这个awk:
awk 'BEGIN{FS=""; OFS=","} {$0 = tolower($0); $1=$1} 1' file
a,b
a,n
f,g
k
m详细信息:
FS="":使用空字段分隔符将每个字符分割为单独的fieldOFS=",":,使用输出字段分隔符作为,$0 = tolower($0):小写characters$1=$1:Force awk重写每个记录,使用OFS value1:打印每个记录替代解决方案:
如果您的awk不支持FS="" (空字段分隔符),请使用以下解决方案:
awk -v OFS=, '{$0 = tolower($0); gsub(/[a-z]/, "&,"); sub(/,$/, "")} 1' file发布于 2020-06-19 16:42:32
你能试一下吗。
awk '{$0=tolower($0);gsub(/[a-z]/,"&,");sub(/,$/,"")} 1' Input_file解释:首先通过tolower将整行字母转换成小写字母,然后在全球范围内用字母和,替换每个字母。最后,将最后出现的,替换为NULL,然后提到1打印编辑的行。
第二个解决方案:使用GNU sed的
sed 's/[[:alpha:]]/\L&,/g;s/,$//' Input_file发布于 2020-06-19 16:51:18
如果你的awk是gawk awk -v FS='' '$0=tolower($0) {$1=$1}1' OFS=',' myFile
https://stackoverflow.com/questions/62474821
复制相似问题