京东 · Shell 编程 · 算法编程题
京东 Shell 编程 时限 1 秒 / 256 MB

题目描述

我们有一个文件 nowcoder.txt,现在需要写一个bash代码把里面的手机号码变成xxx-xxxx-xxxx。
数据保证手机号码是11位的。

样例共 1 组

样例 1
输入
lanzi 30 12345678901
yingying 20 18912345678
输出
lanzi 30 123-4567-8901
yingying 20 189-1234-5678

算法解析依据充分

考点:Shell 文本处理

限制 1 秒 / 256MB | Shell 脚本题

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

本题是 Shell 文本处理题:给定一个文本文件 nowcoder.txt,要求用 shell 命令完成指定的文本变换或统计。

建议步骤

  1. 先确认要处理的字段与分隔符(题面样例会给出,通常是空格分隔;有表头时记得用 NR>1 跳过)。
  2. 选工具:按字段处理用 awk,逐行变换用 while read,简单替换用 sed,筛选行用 grep
  3. 输出格式必须与样例严格一致:分隔符、行数、是否保留表头、是否需要行号。

常用命令速查

  • 取某几列:awk '{print $1, $2}' nowcoder.txt
  • 跳过表头:awk 'NR>1{...}'
  • 全局替换:sed 's/old/new/g'
  • 按条件筛选并带行号:grep -n "pattern"
  • 按单词长度过滤:awk '{for(i=1;i<=NF;i++) if(length($i)>5) print $i}'
  • 行列转换:awk '{for(i=1;i<=NF;i++) a[i]=a[i]" "$i} END{for(i=1;i<=NF;i++) print a[i]}'
  • 脱敏替换:sed -E 's/([0-9]{3})[0-9]{4}([0-9]{4})/****/g'

易错点

  • 表头行没跳过(或样例本要求保留却跳过了)。
  • 分隔符是连续多个空格时,cut -d" " 会切出空字段,改用 awk 更稳。
  • 替换忘加 g,只替换了每行的第一处。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年春招-京东-技术通用岗位-第五批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解