Linux脚本练习之script059-统计文件的行数

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script059-统计文件的行数相关的知识,希望对你有一定的参考价值。

script059

题目

注:题目来源于 SHELL1 统计文件的行数

写一个 bash 脚本以输出一个文本文件 nowcoder.txt 中的行数。

示例,假设 nowcoder.txt 内容如下:

#include <iostream>
using namespace std;
int main()

    int a = 10;
    int b = 100;
    cout << "a + b:" << a + b << endl;
    return 0;

那么你的脚本应当输出:

9

脚本一

使用 wc 命令的 -l 选项统计行数,结果只会显示行数:

cat nowcoder.txt | wc -l

脚本二

其中 wc -l nowcoder.txt 会显示文件的总行数和文件名,所以需要使用 awk 命令提取第一个字段域,即总行数。

wc -l nowcoder.txt | awk 'print $1'

脚本三

循环读取文件 nowcoder.txt 中的每一行,然后用一个计数变量 count 来统计总行数,最后输出总行数。没遍历一行,计数器就加一。

#!/bin/bash

count=0

while read line; do
  count=$(($count+1))
done < nowcoder.txt

echo "$count"

脚本四

grep 命令的 -c 选项可以统计匹配到的行数。而 grep ".*" 表示匹配任何行,因为 . 表示任意字符,* 表示前面的任意字符出现零次或者任意次,所以可以匹配到所有的文本行,因此再用 -c 选项统计匹配行数。

 cat nowcoder.txt | grep ".*" -c

脚本五

使用 awk 命令编程来统计文件 nowcoder.txt 的总行数,其中 BEGIN 中声明一个计数器变量 count 用来记录总行数;而 中每遍历一行,则计数器变量 count 就加一;最后的 END 是当遍历完所有行及进行相关操作后就打印计数器变量 count 即总行数。

awk 'BEGINcount=0 count=count+1 ENDprint count' nowcoder.txt 

脚本六

awk 中的 NR 是内置变量表示行号,awk 'print NR' nowcoder.txt 就会显示每行的行号,而 tail -n 1 表示获取最后一行的行号,即总行数。

awk 'print NR' nowcoder.txt | tail -n 1

脚本七

cat 命令使用 -n 选项也可以显示文件的行号,但同时也会打印该行的内容;使用 tail -n 1 获取最后一行的行号和内容;再用 awk 命令提取最后一行显示的行号。

cat -n nowcoder.txt | tail -n 1 | awk 'print $1'

脚本八

sed -n '$=' 命令也可以显示文件的总行数。

sed -n '$=' nowcoder.txt 

脚本九

nl 命令同 cat -n 一样,都可以显示文件的行号和内容。

nl nowcoder.txt | tail -n 1 | awk 'print $1'

注:但未通过该网站的测试用例。

脚本十

可以直接在 awk 命令的 END 中打印内置变量 NR 就会输出文件的总行数。

awk 'ENDprint NR' nowcoder.txt

以上是关于Linux脚本练习之script059-统计文件的行数的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script046-统计文件中仅包含数字的行。

Linux脚本练习之script038-统计一共有多少个普通用户。

Linux脚本练习之script084-nginx日志分析之统计爬虫抓取404的次数

Linux脚本练习之script091-统计VSZ,RSS各自总和

Linux脚本练习之script091-统计VSZ,RSS各自总和

Linux脚本练习之script080-nginx日志分析之IP统计