我需要从包含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”运行。
答案 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