Shell 脚本 - 根据输入数字在图案之间打印线条
Shell Script - Getting lines printed between pattern based on input number
我发现了许多与通过 shell 脚本在两个模式之间打印线条相关的示例。但是,我想出了一种情况,即根据给定的输入数字在块之间打印行。所以,这基本上是一个包含 100 多个问题的 tex 文件。这是我的示例输入文件:
StartQuestion # First Question Block
\item This is First Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Second Question Block
\item This is Second Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Third Question Block
\item This is Third Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Fourth Question Block
\item This is Fourth Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Fifth Question Block
\item Why are we studying Linear Momentum?
EndQuestion
..... and so on.
所以每个块都以 StartQuestion 开始并以 EndQuestion 标签结束。我能够使用 sed 得到所有块之间的问题。我觉得这对我的情况更通用。
但是,如果用户要求仅打印问题 3、4 和 32,我如何使用 bash 提取块 3、4 和 32 之间的行?有人可以支持我吗?
您可以改用 awk
。
在每个块开始时增加一个计数器 - 然后在块内打印之前进行测试。
$ awk '/StartQuestion/{ n++ } /StartQuestion/,/EndQuestion/{ if (n == 1 || n == 3) print }' questions.txt
StartQuestion # First Question Block
\item This is First Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Third Question Block
\item This is Third Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
我发现了许多与通过 shell 脚本在两个模式之间打印线条相关的示例。但是,我想出了一种情况,即根据给定的输入数字在块之间打印行。所以,这基本上是一个包含 100 多个问题的 tex 文件。这是我的示例输入文件:
StartQuestion # First Question Block
\item This is First Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Second Question Block
\item This is Second Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Third Question Block
\item This is Third Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Fourth Question Block
\item This is Fourth Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Fifth Question Block
\item Why are we studying Linear Momentum?
EndQuestion
..... and so on.
所以每个块都以 StartQuestion 开始并以 EndQuestion 标签结束。我能够使用 sed 得到所有块之间的问题。我觉得这对我的情况更通用。
但是,如果用户要求仅打印问题 3、4 和 32,我如何使用 bash 提取块 3、4 和 32 之间的行?有人可以支持我吗?
您可以改用 awk
。
在每个块开始时增加一个计数器 - 然后在块内打印之前进行测试。
$ awk '/StartQuestion/{ n++ } /StartQuestion/,/EndQuestion/{ if (n == 1 || n == 3) print }' questions.txt
StartQuestion # First Question Block
\item This is First Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion
StartQuestion # Third Question Block
\item This is Third Question.
A) Answer-1
B) Answer-2
C) Answer-3
D) Answer-4
EndQuestion