四时宝库

程序员的知识宝库

shell编程中如何打印文件的第n行?



有几种方法可以实现这个目标:

  1. 使用sed命令可以打印第n行:
   sed -n "${n}p" "$file"

但是,这种方法会读取整个文件,即使只需要第三行。为了避免这个问题,可以使用q?命令在第n行退出,并使用d?命令删除其他所有行:

   sed "${n}q;d" "$file"
  1. 另一种方法是获取从第n行开始的行,并获取其中的第一行:
   tail -n "+$n" "$file" | head -n 1
  1. 使用AWK?也是一种方法:
   awk -v n="$n" 'NR==n{print;exit}' "$file"

如果需要打印多行,可以轻松地修改任何先前的方法:

   x=3 y=4
   sed -n "$x,${y}p;${y}q;" "$file"                # 打印$x到$y行;在第$y行后退出。
   head -n "$y" "$file" | tail -n "$((y - x + 1))"   # 同样
   head -n "$y" "$file" | tail -n "+$x"            # 如果你的tail支持的话
   awk -v x="$x" -v y="$y" 'NR>=x{print} NR==y{exit}' "$file"        # 同样

或者使用一个简单的读取循环计数器:

   # Bash/ksh
   m=0
   while ((m++ < n)) && read -r _; do
       :
   done

   head -n 1

为了将内容读入变量,最好使用read?或mapfile?而不是外部命令。可以通过调整mapfile?的-n?选项的参数,将多行内容读入给定的数组变量或默认数组MAPFILE?中:

   # Bash4
   mapfile -ts "$((n - 1))" -n 1 x <"$file"
   printf '%s\n' "$x"

如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接