[英]Is there a way to read from the bottom of a file until a certain character is found
[英]GREP lines from file in another file until occurence of a certain character
grep -A 10 -f smallfile bigfile
greps來自bigfile中的smallfile和接下來的10行的每一行
是否有可能通過使用另一個標志而不是-A來保持grepping以下行,直到bigfile中出現一個字符(比如說@),我需要從smallfile中為數百行進行,我沒有信息如何從smallfile到我需要grep的行之后的許多行,它會為每個行更改。 示例只是說明其中一行:
小文件:
@123
@555
大文件:
@123
abc
def
ghj
@789
sdf
tyu
rzx
@555
yui
wer
@435
teg
gdgd
所以我希望它能給我這個
@123
abc
def
ghj
@555
yui
wer
如果你知道從另一個文件中的一個文件“grepping”行的另一種方法可以做到這一點,那也行,我可能會嘗試編寫python腳本或更復雜的循環,但我相信應該有一種方法可以grep使用像-m這樣的標志來做這件事,但我無法讓它按照我想要的方式工作。
非常感謝!
使用awk比使用grep更好地處理這項工作。 在我的測試中,Bellow腳本似乎正常工作:
$ awk 'NR==FNR{a[$0];next}$0 in a{print;f=0;next} \
{if ($0 !~ /^@/ && f!=1) {print} else {f=1}}' smallfile bigfile
甚至:
awk 'NR==FNR{a[$0];next}$0 in a || ($0 !~ /^@/ && f!=1){print;f=0;next}{f=1}' file1 file2
說明:
awk腳本基於模式'condition1{action1}condition2{action2}etc'
FNR
=打開文件行號(在讀取下一個文件時重置)
NR
=全局行號 - 在所有文件中不斷增加
||
= OR邏輯運算符
$0
=整條線
a[$0]
=使用$ 0初始化一個數組作為鍵/索引
$0 in a
= $ 0檢查$ 0(整行)是否為數組a的鍵/索引
$0 !~/^@/
= $ 0與正則表達式匹配/ ^ @ / =不以@開頭
next
=讀下一行
文件由awk串行讀取條件可以省略,動作可以直接寫入。 在這種情況下,當awk到達時總是執行動作(相當於condition == 1 / true)
對於給定條件,可以省略動作。 在這種情況下,將執行默認操作= print $ 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.