如何从unix shell中的文本文件中打印所需的段落

时间:2014-06-23 11:08:25

标签: shell unix

我需要从包含N个段落的文本文件中打印所需的段落。

我的脚本提供了所需的输出,但我仍然想知道更高效,更简单的代码来实现这一目标,

awk 'match($0,/ /){print NR;}' para.txt  > temp
para=$1
Para_start=`sed -n ${para}p temp`;
next_para=`expr ${para} + 1`;
Next_para_start=`sed -n ${next_para}p temp`;
Para_end=`expr ${Next_para_start} - 1`;
sed -n ${Para_start},${Para_end}p para.txt

段落在每个段落的开头都有制表空间。 上面的脚本应该以“para.sh 3”运行。

2 个答案:

答案 0 :(得分:1)

所有逻辑都可以轻松地重构为单个Awk脚本。

awk -v p="$1" 'BEGIN { r=1 }
    /^\t / { ++i }
    i>p { exit r }
    i==p { print; r=0 }'  para.txt

当我们看到分隔符时,我们会增加i。如果我们到达了所需的段落,我们就完成了(退出代码表明实际上是否打印了任何内容)。如果这是所需的段落,则打印当前行。

答案 1 :(得分:0)

使用gnu-awk可以执行单个awk命令:

awk 'NR==3' RS='\n[[:blank:]]+' file