2013-07-25 26 views
0

我有一些轉儲文件,稱爲dump_mydump_0.cfg,dump_mydump_250.cfg,...,一直到dump_mydump_40000.cfg。對於每個轉儲文件,我想將第16行讀出來,讀取它們,並將它們放入一個文件中。將多個文件的第n行讀取到一個輸出中

我使用sed,但我遇到了一些語法錯誤。這是我到目前爲止有:

for lineNo in 16 ; 
for fileNo in 0,40000 ; do 
    sed -n "${lineNo}{p;q;}" dump_mydump_file${lineNo}.cfg >> data.txt 
done 
+0

你害羞'do'的和'done'在您的片段。 – Rubens

+0

非常感謝!!!!!!!!!!!!!!!! – ilephant

+0

如果給出的答案正確地解決了您的問題,最好將其標記爲答案;如果您想接受答案,請點擊投票箭頭下面的勾號。很高興幫助! (: – Rubens

回答

1

考慮您的文件被命名爲250間隔,你應該得到它的工作使用:

for lineNo in 16; do 
    for fileNo in {0..40000..250}; do 
     sed -n "${lineNo}{p;q;}" dump_mydump_file${fileNo}.cfg >> data.txt 
    done 
done 

注意兩者在bash語法更正 - dodone,和{0..40000..250} - 和輸入文件名稱,應取決於${fileNo}而不是${lineNo}

+0

我想知道爲什麼一個人會在第一個位置循環16位數?爲什麼不用'lineNo = 16'並擺脫外部循環? – SethMMorton

1

可替代地,與(GNU)AWK:

awk "FNR==16{print;nextfile}" dump_mydump_{0..40000..250}.cfg > data.txt 

(I所用的文件名作爲顯示在OP相對於這將已經通過bash的生成循環的那些,如果校正工作。但你可以根據需要進行編輯。)

好處是你不需要for循環,而且你不需要產生160個進程。但這不是一個巨大的優勢。

+0

問題已經解決了!但是,非常感謝! – ilephant

0

這可能爲你工作(GNU SED):

sed -ns '16wdata.txt' dump_mydump_{0..40000..250}.cfg 
相關問題