
我正在嘗試過濾一個非常大的日誌文件,並想知道我的命令是否有任何替代方案?或一些優化?這是代碼:
#!/bin/bash
nice -20 sed '/./{H;$!d;};x;/37455299339/!d' 1.txt > /tmp/new.txt
nice -20 sed -n '/Acct-Status-Type/,/NAS-Identifier/p' /tmp/new.txt > /tmp/new_1.txt
rm /tmp/new.txt
nice -20 sed '/Acct-Status-Type/{x;p;x;}' /tmp/new_1.txt > /tmp/new_2.txt
rm /tmp/new_1.txt
nice -20 less /tmp/new_2.txt | grep -A1 -B1 37455299339 | grep -A1 -B1 User-Name > new_3.txt
答案1
作為第一步,我將刪除所有臨時文件並改用管道:從第一個文件開始,sed
您可以通過管道將 stdout 傳輸到第二個文件,然後再傳輸到第三個文件。然後,您的less
命令就沒用了:只需再次從第三個管道傳輸sed
到grep
。
使用管道會為你帶來很多好處:首先,你不會浪費你的磁碟空間,其次,你不會等待所有這些磁碟 I/O。
為了更好地找到解決方案,您應該告訴我們目前阻礙您的是什麼:它是命令之一sed
嗎?哪一個?