用于计算文件中行数和字数的 Shell 脚本
Linux 为用户提供了命令行工具的一个很棒的很酷的功能以及一个图形用户界面,他们可以在其中通过破坏命令来执行任务。所有这些命令都会根据它们的执行情况返回一个状态。它的执行值可用于显示错误或在 shell 脚本中执行一些其他操作。
在某些情况下,可能需要跟踪特定文件中的行数和单词数。在这种情况下,可以使用以下任何一种方法来计算 Linux 中特定文件中的行数和单词数。让我们举一些例子来更好地理解:
示例:考虑具有以下内容的文件(demo.txt):
This is first line.
This is second line.
This is third line.
输出:
Number of line = 3
Number of words = 12
让我们看看计算行数和单词数的所有方法,以及如何在 shell 脚本中使用它们。
方法一:使用WC命令
wc代表字数。使用 wc 命令获取单词数、行数、 白色的数量 空间等可以确定。
句法-
wc [option] [input-file]
方法:
- 创建一个变量来存储文件路径。
- 使用wc –lines命令计算行数。
- 使用 wc –word 命令来统计单词的数量。
- 使用 echo 命令打印行数和单词数。
输入文件: cat demo.txt
This is first line
This is second line
This is third line
cat命令用于显示文件的内容。
脚本:
#!/usr/bin/bash
# path to the file
file_path="/home/amninder/Desktop/demo.txt"
# using wc command to count number of lines
number_of_lines=`wc --lines < $file_path`
# using wc command to count number of words
number_of_words=`wc --word < $file_path`
# Displaying number of lines and number of words
echo "Number of lines: $number_of_lines"
echo "Number of words: $number_of_words"
输出:
解释:
- 第一行告诉系统 bash 将用作解释器。
- wc命令用于找出行数和单词数。
- 创建一个变量来保存文件路径。
- 之后,wc 命令与 -lines 参数一起使用来计算行数,类似地,wc 命令与 -words 参数一起用于计算文件中的单词数。
- 最后用echo命令显示单词数和行数。
注意:以“#”符号开头的行称为注释,解释器会忽略除第一行之外的行。
方法二:使用awk命令awk是一种脚本语言,主要用于文本预处理和文本操作。 使用awk,我们可以进行模式搜索、查找和替换、单词计数、行计数、特殊符号计数、空格计数等。
句法:
awk {action-to-be-performed} [input-file]
方法一:
- 创建一个变量来存储文件路径。
- 初始化一个计数器变量来计算行数。
- 每行增加计数器变量以计算行数。
- 使用打印命令显示行数。
- 初始化另一个计数器变量来计算单词的数量。
- 使用空格作为记录分隔符并递增计数器变量以计算由空格分隔的单词数。
- 之后,使用打印命令显示字数。
脚本:
#!/usr/bin/bash
# path to the file
file_path="/home/amninder/Desktop/demo.txt"
# Method 1
echo "Using method 1"
# using awk command to count number of lines
awk 'BEGIN{c1=0} //{c1++} END{print "Number of lines: ",c1}' $file_path
#using awk command to count number of words
awk 'BEGIN{c=0} //{c++} END{print "Number of words: ",c}' RS="[[:space:]]" $file_path
输出:
解释:
- 在第一行中,创建了一个变量 file_path 来保存文本文件的路径。
- awk 命令语句可以分为以下几个部分。
- BEGIN{c=0}将初始化一个被调用的计数变量。 //{c++}会在遇到新行时将计数变量 c 增加 1。
- END{print "Number of lines: ", c}将打印行数。
- 类似地,通过使用 RS=”[[:space:]]将每个单词以空格分隔来计算单词的数量。这里,RS是一个Record Separator,本例中使用空格作为分隔符。
注意:以“#”符号开头的行称为注释,解释器会忽略除第一行之外的行。
方法二:
- 创建一个变量来存储文件路径。
- 使用特殊的 NR 变量找出行数。 NR表示记录数,它保存已处理的记录数。
- 使用NF (当前记录中的字段数)找出每行中的单词数。
- 然后使用while循环遍历所有行并总结每行的NF。
- 显示行数。
NF 示例:让我们归档 -
First line is on top
Second line is on second last position
NF 表示当前记录中的字段数,即当前行中的单词数。
command:
awk '{print NF}' demo.txt
Output:
5
7
这里,5表示第一行有5个单词,7表示第二行有7个单词。
脚本:
#!/usr/bin/bash
# path to the file
file_path="/home/amninder/Desktop/demo.txt"
# Method 2
echo "Using method 2"
# using NR to count number of lines
awk 'END{print "Number of lines:",NR}' $file_path
#using awk command to count number of words
awk '{i=0; count=0; while (i
输出:
解释:
- 在第一行中,创建了一个变量 file_path 来保存文本文件的路径。
- 然后,使用'END{print “Number of lines:”,NR}' 打印行数。
- 这里,END 表示我们对 NR 变量的最后一个值感兴趣,因为NR变量保存了已处理记录的计数。
- 为了计算行数,使用while循环直到处理的记录数。
- 添加 NF的值,即每行中的单词数。
- 最后,打印存储在 count 变量中的单词数。