簡體   English   中英

如何從UNIX shell中的文本文件打印所需的段落

[英]How to print the required paragraph from a text file in unix shell

我需要從具有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”運行。

所有邏輯都可以輕松地重構為單個Awk腳本。

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

當我們看到分隔符時,我們增加i 如果我們超過了所需的段落,我們就完成了(退出代碼表明是否實際打印了任何內容)。 如果這是所需的段落,請打印當前行。

使用gnu-awk可以執行單個awk命令:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM