[英]Script to delete all /n number of lines starting from a word except last line
如何刪除單詞下除文件中最后一行以外的所有行。 假設我有一個包含
| 02/04/2010 07:24:20 | 20-24 | 26 | 13 | 2.60 | | 02/04/2010 07:24:25 | 25-29 | 6 | 3 | 0.60 | +---------------------+-------+------------+----------+-------------+ 02-04-2010-07:24 --- ER GW 03 +---------------------+-------+------------+----------+-------------+ | date | sec | BOTH_MO_MT | MO_or_MT | TPS_PER_SEC | +---------------------+-------+------------+----------+-------------+ | 02/04/2010 07:00:00 | 00-04 | 28 | 14 | 2.80 | | 02/04/2010 07:00:05 | 05-09 | 27 | 14 | 2.70 | ... ... ... ... END OF TPS PER 5 REPORT
並且我需要從“ 02-04-2010-07:24 --- ER GW 03”中刪除所有內容,除了“每5份報告的TPS結束時間”,然后保存文件。 這大約需要處理700個文件。 所有文件的格式相同,帶有datemonthday文件名。
sed -ni '/ER GW/ b end; p; d; :end $p; n; b end' $file
$ file應該是文件名。 例如:
for file in *.txt ; do
sed -ni '/ER GW/ b end; p; d; :end $p; n; b end' $file
done
以下awk腳本可以做到這一點:
awk '
/^02-04-2010-07:24 --- ER GW 03$/ {skip=1}
{ln=$0;if (skip!=1){print}}
END {if (skip==1){print $ln}}'
如以下成績單所示:
$ echo '| 02/04/2010 07:24:20 | 20-24 | 26 | 13 | 2.60 |
| 02/04/2010 07:24:25 | 25-29 | 6 | 3 | 0.60 |
+---------------------+-------+------------+----------+-------------+
02-04-2010-07:24 --- ER GW 03
+---------------------+-------+------------+----------+-------------+
| date | sec | BOTH_MO_MT | MO_or_MT | TPS_PER_SEC |
+---------------------+-------+------------+----------+-------------+
| 02/04/2010 07:00:00 | 00-04 | 28 | 14 | 2.80 |
| 02/04/2010 07:00:05 | 05-09 | 27 | 14 | 2.70 |
...
...
...
...
END OF TPS PER 5 REPORT' | awk '
/^02-04-2010-07:24 --- ER GW 03$/ {skip=1}
{ln=$0;if (skip!=1){print}}
END {if (skip==1){print $ln}}'
產生:
| 02/04/2010 07:24:20 | 20-24 | 26 | 13 | 2.60 |
| 02/04/2010 07:24:25 | 25-29 | 6 | 3 | 0.60 |
+---------------------+-------+------------+----------+-------------+
END OF TPS PER 5 REPORT
按照要求。
分解:
為了做給多個文件,你可以使用for
:
for fspec in *.txt ; do
awk 'blah blah' <${fspec} >${fspec}.new
done
在注釋(搜索"--- ER GW 03"
)中進行更新所需的命令是:
awk '
/--- ER GW 03/ {skip=1}
{ln=$0;if (skip!=1){print}}
END {if (skip==1){print $ln}}'
這可能對您有用:
sed -i '$q;/^02-04-2010-07:24 --- ER GW 03/,$d' *.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.