![](/img/trans.png)
[英]From UNIX shell, how to find all files containing a specific string, then print the 4th line of each file?
[英]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.