如何使用“awk”跳过文件的第一行
Linux 中“awk”命令有多种用途。例如,它可用于打印文本文件的内容。许多文本文件的第一行包含文件的标题,有时,在打印文件内容时必须跳过第一行。在本教程中,我们将向您展示如何使用“awk”命令完成此任务。
创建一个文本文件
要按照本教程进行操作,请创建一个名为
booklist.txt
的制表符分隔文本文件,其中包含以下内容。该文件包含书籍及其相应作者的列表。在本教程中,我们将向您展示如何在跳过第一行后打印该文件的不同部分。
Cybersecurity with bash Paul Troncone, Carl Albing
Command Line Kung Fu Jason Cannon
Linux Command Line Travis Booth
Bash in easy steps Mike McGrath
Unix in easy steps Mike McGrath
示例 1:使用 NR 和“>”运算符跳过文件的第一行
NR 变量表示文件中的记录数。以下“awk”命令使用 NR 变量跳过文件的第一行。第一行的 NR 值为 1。以下命令将打印 NR 值大于 1 的行。
$
cat
booklist.txt
$
awk
'(NR>1)'
booklist.txt
运行上述命令后将产生以下输出。输出包括文件第一行以外的所有行。
示例 2:使用 NR 和“!=”运算符跳过第一行
以下“awk”命令与前面示例中的命令类似。但是,这里使用“!=”比较运算符而不是“>”。
$
cat
booklist.txt
$
awk
'NR!=1'
booklist.txt
运行上述命令后将产生以下输出。输出显示文件第一行以外的所有行。
示例 3:使用条件语句跳过文件的第一行
如果 if 语句为 true,则以下“awk”命令将打印文件的行。这里,只有当 NR 值不等于 1 时,if 语句才为 true。
$
cat
booklist.txt
$
awk
'{if (NR!=1) {print}}'
booklist.txt
运行上述命令后将产生以下输出。输出包括文件中除第一行之外的所有行。
示例 4:打印文件中的书籍名称,但跳过第一行
本示例中使用两个“awk”命令来打印除第一本书之外的所有书籍名称。 `awk` 命令将根据字段分隔符 (\t) 从文件中读取第一列,并将输出发送到第二个 `awk` 命令。第二个“awk”命令将打印所需的输出。
$
cat
booklist.txt
$
awk
-F
"
\t
"
'{print $1}'
booklist.txt
|
awk
'NR!=1 {print}'
运行上述命令后将产生以下输出。输出显示除第一本书之外的所有书籍名称。
示例5:跳过第一行后格式化文件内容
在以下“awk”命令中使用“-F”选项、NR 变量和 printf 函数在跳过第一行后生成格式化输出。该命令会根据\t将文件内容分成列,当NR值至少为2时,printf将打印第一列和第二列。
$
cat
booklist.txt
$
awk
-F
'\t'
'NR>=2 {printf "%30s %20s\n", $1, $2}'
booklist.txt
运行上述命令后将产生以下输出。输出显示文件的格式化内容,不包括文件的第一行。
示例 6:使用 NR 和 NF 跳过第一行后打印书名
以下“awk”命令使用“-F”选项以及 NR 和 NF 在跳过第一本书后打印书籍名称。 ‘-F’选项用于以\t为基础分隔文件内容。 NR 用于跳过第一行,NF 用于仅打印第一列。
$
cat
booklist.txt
$
awk
-F
'\t'
'NR>1 && NF=1'
booklist.txt
运行上述命令后将产生以下输出。输出包括文件中除第一本书之外的所有书籍名称。
示例 7:跳过第一行后打印格式化的作者姓名
以下“awk”命令使用“-F”选项和条件语句在跳过第一行后打印作者姓名。这里,在if条件中使用NR值。这里,“作者姓名:\n\n”将被打印为第一行,而不是第一行的内容。对于 NR 的其他值,将打印文件中的作者姓名。
$
cat
booklist.txt
$
awk
-F
'\t'
' {if (NR==1) printf "\nAuthor Name:\n\n"; else printf "%s\n", $2}'
booklist.txt
运行上述命令后将产生以下输出。输出显示带有换行符的文本“作者姓名:”,并且打印除第一个作者之外的所有作者姓名。
结论
可以使用各种 Linux 命令跳过文件的第一行。如本教程所示,有多种方法可以使用“awk”命令跳过文件的第一行。值得注意的是,“awk”命令的 NR 变量可用于跳过任何文件的第一行。