Unix 在逗号之间每隔一秒的数字后插入字符串中的小数点
我需要在逗号之间的每个字符串的第二个数字后插入一个小数点 some.file: 尝试的代码: 电流输出: 预期产出: 我尝试的代码似乎只抓取了第二个逗号之前的数字字符串,而不是行中的每个数字字符串,不管逗号是什么。使用:Unix 在逗号之间每隔一秒的数字后插入字符串中的小数点,unix,awk,sed,Unix,Awk,Sed,我需要在逗号之间的每个字符串的第二个数字后插入一个小数点 some.file: 尝试的代码: 电流输出: 预期产出: 我尝试的代码似乎只抓取了第二个逗号之前的数字字符串,而不是行中的每个数字字符串,不管逗号是什么。使用: $ echo "JAN,334,333,332,331,330,330,329,328,328,327,327,327" |sed -e "s/\([0-9]\{2\}\)/\1./g" JAN,33.4,33.3,33.2,33.1,33.0,33.0,32.9,32.8,3
$ echo "JAN,334,333,332,331,330,330,329,328,328,327,327,327" |sed -e "s/\([0-9]\{2\}\)/\1./g"
JAN,33.4,33.3,33.2,33.1,33.0,33.0,32.9,32.8,32.8,32.7,32.7,32.7
对于就地更换:
sed -i -e "s/\([0-9]\{2\}\)/\1./g" some.file
此处不需要,但更安全的版本可能是:
sed -i -e 's/,\([0-9]\{2\}\)\([0-9]\)/,\1.\2/g' some.file
使用:
对于就地更换:
sed -i -e "s/\([0-9]\{2\}\)/\1./g" some.file
此处不需要,但更安全的版本可能是:
sed -i -e 's/,\([0-9]\{2\}\)\([0-9]\)/,\1.\2/g' some.file
您可以按如下方式使用Awk
awk 'BEGIN{FS=OFS=","}{for(i=2;i<=NF;i++) if (length($i) >2) { $i=substr($i,0,2)"."substr($i,3,length($i)); } }1' file
其思想是从第二条记录开始循环通过元素,直到$NF为止,并对超过2位的数字应用逻辑
是一个POSIX兼容函数,用于从当前处理的记录中获取子字符串
子字符串,开始[,长度]
返回字符串的长字符子字符串,从字符数开始。字符串的第一个字符是第一个字符。您可以按如下方式使用Awk
awk 'BEGIN{FS=OFS=","}{for(i=2;i<=NF;i++) if (length($i) >2) { $i=substr($i,0,2)"."substr($i,3,length($i)); } }1' file
其思想是从第二条记录开始循环通过元素,直到$NF为止,并对超过2位的数字应用逻辑
是一个POSIX兼容函数,用于从当前处理的记录中获取子字符串
子字符串,开始[,长度]
返回字符串的长字符子字符串,从字符数开始。字符串的第一个字符是第一个字符。另一个awk,将所有数字除以10,并用一个小数点打印
awk -v RS=, '{if($1==$1+0) printf "%.1f,", $1/10; else printf "%s,",$1}' file |
sed '$s/,$/\n/'
JAN,33.4,33.3,33.2,33.1,33.0,33.0,32.9,32.8,32.8,32.7,32.7,32.7
另一个awk,将所有数字除以10,并用一个小数点打印
awk -v RS=, '{if($1==$1+0) printf "%.1f,", $1/10; else printf "%s,",$1}' file |
sed '$s/,$/\n/'
JAN,33.4,33.3,33.2,33.1,33.0,33.0,32.9,32.8,32.8,32.7,32.7,32.7
在awk中使用正则表达式替换:
$ awk 'gsub(/[0-9],|[0-9]$/,".&")||1' file
JAN,33.4,33.3,33.2,33.1,33.0,33.0,32.9,32.8,32.8,32.7,32.7,32.7
解释:
gsub/[0-9],|[0-9]$/,.&将所有数字+逗号替换为句点+该数字+逗号,并保留记录末尾的最后一个数字
||或
我还是把它打印出来
在awk中使用正则表达式替换:
$ awk 'gsub(/[0-9],|[0-9]$/,".&")||1' file
JAN,33.4,33.3,33.2,33.1,33.0,33.0,32.9,32.8,32.8,32.7,32.7,32.7
解释:
gsub/[0-9],|[0-9]$/,.&将所有数字+逗号替换为句点+该数字+逗号,并保留记录末尾的最后一个数字
||或
我还是把它打印出来
sed的另一种方法:
sed -e "s/\b[0-9][0-9]/&./g"
sed的另一种方法:
sed -e "s/\b[0-9][0-9]/&./g"
您只错过了替换所有事件的g标志,而不仅仅是第一个。您只错过了替换所有事件的g标志,而不仅仅是第一个。这将把2017年1月转换为2017年1月20日。这将把2017年1月转换为2017年1月20日。