2014-01-06 25 views
0

我有100個文件,所有具有類似的結構只讀文件的一部分/切割特定符號

line1 
line2 
stuff 
RR 
important stuff 

的問題是,我想RR出現時削減(其中它在每個文件)。但是,這並不總是在同一行(它可以是第20行,它可以是第35行),但它總是在那裏。因此,在bash或R中(當在文件中讀取時)是否有任何方法(只是標題的切面)?我寧願R.

+0

爲什麼不讀所有和刪除行其中'RR'出現 – Ananta

+0

對不起,你的意思是Rread在R和手動刪除?嚴重? – user3069326

+0

不是手動的,但有腳本來爲每個文件做這件事。順便說一句,你的意思是刪除RR或任何RR後的行? – Ananta

回答

0

如果你有awk可通過bash你可以這樣做:

awk '(/RR/){p=1; next} (p){print}' < file.txt 

$ cat file.txt 
line1 
line2 
stuff 
RR 
important stuff 
$ awk '(/RR/){p=1; next} (p){print}' < file.txt 
important stuff 

當「RR」串中發現,next導致下一行沒有被讀取,設置標誌p首先評估(p){ print }。隨後的行將被打印。

2

可以讀取所有的行,並刪除不需要的:

dat <- readLines(textConnection(
"line1 
line2 
stuff 
RR 
important stuff")) 
# dat <- readLines("file.name") 


dat[seq(which.max(dat == "RR") + 1, length(dat))] 
# [1] "important stuff" 
+0

但這並不意味着我必須複製過去每個文件到代表部分你的答案?我可能誤解了...... – user3069326

+0

@ user3069326不,您可以使用'dat < - readLines(「file.name」)'。 –

+0

哦,我認爲有一個誤解,我想擺脫Line1,line2和東西......同時保留RR後的所有位...... – user3069326

0

下面的幾個方面:

使用基本工具:

$ tail -n+$((1 + $(grep -n '^RR$' file.txt | cut -d: -f1))) file.txt 
important stuff 
$ 

使用純

$ { while read ln; do [ "$ln" == RR ] && break; done; cat; } < file.txt 
important stuff 
$ 

而另一種方式,假設你能保證不超過9999線在一個文件中:

$ grep -A9999 '^RR$' file.txt | tail -n+2 
important stuff 
$