如何在Unix中提取adafile文件第二列数值的小数点后第二位数字
解决方案:提取第二列小数点后第二位数字
完全可以用nawk(或系统默认的awk,多数Unix系统里两者等价)完成,不需要额外脚本。以下是几种直接可用的命令:
方法1:用awk的字符串定位与截取
nawk '{ dot_pos = index($2, ".") if (dot_pos > 0) { print substr($2, dot_pos + 2, 1) } }' adafile
index($2, "."):找到第二列中.的位置substr($2, dot_pos + 2, 1):从.后第2位开始,截取1个字符,也就是小数点后第二位数字
方法2:按小数点分割字符串
nawk '{ split($2, num_parts, ".") if (length(num_parts[2]) >= 2) { print substr(num_parts[2], 2, 1) } }' adafile
split($2, num_parts, "."):把第二列按.分割成两部分,num_parts[1]是整数部分,num_parts[2]是小数部分substr(num_parts[2], 2, 1):直接取小数部分的第二个字符
备选:用sed命令实现
如果习惯用sed,也可以用正则匹配完成:
sed -E 's/^[^[:space:]]+[[:space:]]+[^.]*\.[0-9]([0-9]).*/\1/' adafile
- 正则逻辑:匹配行首的第一列(
[^[:space:]]+)、空格([[:space:]]+)、小数点前内容([^.]*\.)、小数点后第一位数字([0-9]),然后捕获第二位数字(([0-9])),最后把整行替换成捕获的数字
推荐用awk的方法,逻辑更直白,适合新手理解调试。
内容的提问来源于stack exchange,提问作者TheQuietlyDepressedCS_Student
相关产品推荐
相关产品推荐

