【linux】打印字符串中指定行

本文详细介绍了使用Linux命令行工具如head、tail、wc等高效打印文件特定行数的方法,包括如何获取文件总行数、处理特殊情况及提供多种解决方案。通过实践示例,读者可以轻松掌握在不同场景下灵活应用这些命令,提高工作效率。

只打印第10行 关键在于当行数小于10时不输出。

用 head tail的关键问题是当行数小于10的时候用 head -n 10 只会打出前面的行,再用tail就错了。

所以要知道源文件一共有多少行。用wc

wc -l  显示文件一共有多少行 -w列出有多少字(英文单字) -m列出有多少字符

但是得到了这个数字怎么用呢,需要一个变量存储行数,然后用if语句处理

加:

可以用 tail -n +10 表示从第10行开始显示,这样如果没有第10行就会显示空了

下面是多种答案:

num=$(cat file.txt|wc -l)
if (( $num > 9 )); then
 cat file.txt|head -10|tail -1
fi
STARTING=10; NLINES=1; cat file.txt | tail -n+${STARTING} | head -n${NLINES}
LINE_NUM=`head -n 10 file.txt | wc -l`

if (( $LINE_NUM == "10" )); then
 head -n 10 file.txt | tail -n 1 
else
 echo ""
fi
# Solution 1
cnt=0
while read line && [ $cnt -le 10 ]; do
  let 'cnt = cnt + 1'
  if [ $cnt -eq 10 ]; then
    echo $line
    exit 0
  fi
done < file.txt

# Solution 2
awk 'FNR == 10 {print }'  file.txt
# OR
awk 'NR == 10' file.txt

# Solution 3
sed -n 10p file.txt

# Solution 4
tail -n+10 file.txt|head -1

 

困惑:

①用if[  ]就出错??

②不用变量,直接写if (( `cat file.txt|wc -l` == 10 )) 也出错??

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值