我正在研究一個捕獲信標幀數據包(沒有錯誤的fcs)並以優選格式輸出它的bash腳本,但我遇到了將outptut重定向到文件的問題。將awk輸出重定向到bash中的文件
這是我的命令行當我重定向到一個文件名爲temp
tcpdump -I -i mon0 -vv 2>/dev/null|awk -F ',| ' 'BEGIN{printf "%-10s %-25s%-10s\n","OPTION NO.","ESSID(Beacon Frames)","CHANNEL NO."};$0~/Beacon/{for(i=1;i<=NF;++i){if(($i~/^\([^^]+\)$/) && !($i in arr) && ($0~/CH:/) && !($0~/tsft bad-fcs/)){NR=++c;arr[$i]=1;gsub(/\(|\)/,"",$i);printf("%-10s %-25s",NR,$i);for(x=1;x<=NF;++x){if($x~/^CH:/){print $x " "$(x+1) "\tHit Ctrl+C to stop scan"}}}}}' >> temp
命令行中的終端以上工作正常時,我不重定向到一個文件(的輸出被示出)。當我重定向到一個文件時,我看到文件存在,沒有輸出。
我嘗試以下
1.Pipe命令行輸出像tee -a temp
(輸出到stdout和文件)
例如
tcpdump -I -i mon0 -vv 2>/dev/null|awk -F ',| ' 'BEGIN{printf "%-10s %-25s%-10s\n","OPTION NO.","ESSID(Beacon Frames)","CHANNEL NO."};$0~/Beacon/{for(i=1;i<=NF;++i){if(($i~/^\([^^]+\)$/) && !($i in arr) && ($0~/CH:/) && !($0~/tsft bad-fcs/)){NR=++c;arr[$i]=1;gsub(/\(|\)/,"",$i);printf("%-10s %-25s",NR,$i);for(x=1;x<=NF;++x){if($x~/^CH:/){print $x " "$(x+1) "\tHit Ctrl+C to stop scan"}}}}}'|tee -a temp
我試過
exec > temp command line above
這是一個緩衝問題,因爲數據包捕獲很快?
上述命令行的結果如何重定向到文件?
注:mon0
在命令行中代表監控界面,我開始使用我的無線適配器airmon-ng
編輯:的代碼的分項數字如下
BEGIN {
FS=",| "
printf "%-10s %-25s%-10s\n","OPTION NO.","ESSID(Beacon Frames)","CHANNEL NO."
}
$0~/Beacon/ {
for(i=1;i<=NF;++i) {
if(($i~/^\([^^]+\)$/) && !($i in arr) && ($0~/CH:/) && !($0~/tsft bad-fcs/)) {
NR=++c
arr[$i]=1
gsub(/\(|\)/,"",$i)
printf("%-10s %-25s",NR,$i)
for(x=1;x<=NF;++x) {
if($x~/^CH:/) {
print $x " "$(x+1) "\tHit Ctrl+C to stop scan"
}
}
}
}
}
正如我所說的代碼工作正常..這只是重定向問題..提供代碼的改進,如果需要的話。
難道不是顯而易見的代碼不適合單線程?在你的問題中使用'awk -f script.awk'併發布'script.awk' - 正確縮進。 – hek2mgl 2015-02-23 22:13:53
是的,我知道..我的錯誤在這裏..但腳本非常大..所以我嘗試了一些單線代碼(我的歉意) – repzero 2015-02-23 22:15:12
只需改變它。這可能是一個upvote而不是downvote。 – hek2mgl 2015-02-23 22:15:50