并行分析文件的循环

Wajahat

我有以下脚本来解析一些pcap跟踪文件。有多个文件夹,每个文件夹包含4个pcap需要解析的文件:

for d in * ; 
do cd ${d}; 
for file in firewall router2 vclient vserver ; 
do tshark -r ${file}_log.pcap -T fields -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport -e tcp.len -e ip.len -e ip.hdr_len -e tcp.hdr_len -e _ws.col.Time -t e | awk '{print $1,$2,$3,$4,$6-$7-$8,$9}' > ${file}_conv_t.txt; 
cat ${file}_conv_t.txt | awk '$4==5001{print $6,$5}' | sed 's/\([0-9]*\)\.[0-9]*/\1/' | awk '{sum[$1]+=$2} END {for (i in sum) {print i,sum[i]} }' | sort | cut -d ' ' -f 2 > ${file}_in.csv; 
cat ${file}_conv_t.txt | awk '$3==5001{print $6,$5}' | sed 's/\([0-9]*\)\.[0-9]*/\1/' | awk '{sum[$1]+=$2} END {for (i in sum) {print i,sum[i]} }' | sort | cut -d ' ' -f 2 > ${file}_out.csv ; 
done ; 
cd .. ; 
done

由于所有文件都可以独立解析,因此我想尽可能地使其并行化。我尝试在第一个之后放置一个&而不是;一个,done以便每个文件都得到并行处理,如下所示:

for d in * ; 
do cd ${d}; 
for file in firewall router2 vclient vserver ; 
do tshark -r ${file}_log.pcap -T fields -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport -e tcp.len -e ip.len -e ip.hdr_len -e tcp.hdr_len -e _ws.col.Time -t e | awk '{print $1,$2,$3,$4,$6-$7-$8,$9}' > ${file}_conv_t.txt; 
cat ${file}_conv_t.txt | awk '$4==5001{print $6,$5}' | sed 's/\([0-9]*\)\.[0-9]*/\1/' | awk '{sum[$1]+=$2} END {for (i in sum) {print i,sum[i]} }' | sort | cut -d ' ' -f 2 > ${file}_in.csv; 
cat ${file}_conv_t.txt | awk '$3==5001{print $6,$5}' | sed 's/\([0-9]*\)\.[0-9]*/\1/' | awk '{sum[$1]+=$2} END {for (i in sum) {print i,sum[i]} }' | sort | cut -d ' ' -f 2 > ${file}_out.csv ; 
done &
cd .. ; 
done

但这根本没有用,仍然是连续的。

我想念什么?

Ipor警报器

使用花{}括号:

for d in * ; 
do cd ${d}; 
for file in firewall router2 vclient vserver ; 
do { tshark -r ${file}_log.pcap -T fields -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport -e tcp.len -e ip.len -e ip.hdr_len -e tcp.hdr_len -e _ws.col.Time -t e | awk '{print $1,$2,$3,$4,$6-$7-$8,$9}' > ${file}_conv_t.txt; 
cat ${file}_conv_t.txt | awk '$4==5001{print $6,$5}' | sed 's/\([0-9]*\)\.[0-9]*/\1/' | awk '{sum[$1]+=$2} END {for (i in sum) {print i,sum[i]} }' | sort | cut -d ' ' -f 2 > ${file}_in.csv; 
cat ${file}_conv_t.txt | awk '$3==5001{print $6,$5}' | sed 's/\([0-9]*\)\.[0-9]*/\1/' | awk '{sum[$1]+=$2} END {for (i in sum) {print i,sum[i]} }' | sort | cut -d ' ' -f 2 > ${file}_out.csv ; } &
done
cd .. ; 
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章