我有一個文件,我只想替換以「at line」結尾的行;與「在[line_number]行;」搜索並替換sed以38 MB文件的天文時間
每個偶數行都有目標語句。
例如輸入文件:
0000001:use test;
0000002:system echo at line ;
0000003:insert into pet values ('9999', '7777');
0000004:system echo at line ;
0000005:insert into pet values ('9999', '7777');
0000006:system echo at line ;
示例輸出文件:
0000001:use test;
0000002:system echo at line 2;
0000003:insert into pet values ('9999', '7777');
0000004:system echo at line 4;
0000005:insert into pet values ('9999', '7777');
0000006:system echo at line 6;
我已用awk生成sed命令寫入的腳本。運行時,需要幾天才能完成1000055行文件的任務。
有更好的(基於腳本的)技術嗎?
這裏是當前方法的要點是:
$head -6 c.txt
0000001:use test;
0000002:system echo at line ;
0000003:insert into pet values ('9999', '7777');
0000004:system echo at line ;
0000005:insert into pet values ('9999', '7777');
0000006:system echo at line ;
$wc c.txt
1000055 5500241 39501572 c.txt
$cat c.txt | grep "at line" | awk -F":" '{printf("sed -i \x27%ds/at line ;/at line %d;/\x27 c.txt\n", $1, $1)}' > a.sh
$time sh ./a.sh
注:其中測試正在運行是一個服務器類計算機上的單個VM的機器。我想用臺階標記工具的結果發佈它的細節來證明它不是問題。但是我認爲這並不是必須的,因爲問題是顯而易見的(在整個文件上運行sed重複1000055次/次)給在這種情況下有一定知識的人。順便說一句,我知道有些人不喜歡用貓。但我習慣了。爲了主要討論請求忽略。
'這裏不需要grep',您可以用'awk'的一樣。 – Inian
我看到它更好。 –