我在windows上使用msys和mingw環境運行bash腳本。我似乎有一個問題,使用類似'cut'或sed'的命令會導致每次調用的開銷。我不確定這是Windows運行.exe的還是什麼的影響。無論如何,這裏是我的代碼:BASH:一次設置多個變量/性能
SOMETHING=`m6811-elf-readelf.exe -l "${TARGET_BASENAME}.elf" | sed '1,/Type/d' | sed '1,/^$/!d'`
echo "$SOMETHING" | while read -r line; do
# MEMORY_ADDRESSES=`echo $line | sed -ne 's/LOAD[^0-9a-z]*0x\([^ ]*\) 0x\([^ ]*\) 0x\([^ ]*\) 0x\([^ ]*\) 0x\([^ ]*\) .*/\1 \2 \3 \4 \5/p;'`
OFFSET=`echo "$line" | cut -f12 -d\ `
VIRTADDR=`echo "$line" | cut -f13 -d\ `
PHYSADDR=`echo "$line" | cut -f14 -d\ `
FILESIZE=`echo "$line" | cut -f15 -d\ `
MEMSIZE=`echo "$line" | cut -f16 -d\ `
echo $OFFSET $VIRTADDR $PHYSADDR $FILESIZE $MEMSIZE
done
我想盡快得到這個運行。我認爲sed系列讓我放慢了速度,所以我將它刪除了,而我正在使用cut。對於我使用的每條切割線,此代碼要慢得多。
的財產以後變量的內容是:
LOAD 0x000000 0x00000000 0x00000000 0x00680 0x00680 RW 0x1000
LOAD 0x001100 0x00002100 0x00002100 0x00000 0x0005a R 0x1000
LOAD 0x00115a 0x0000215a 0x0000215a 0x00615 0x00669 RWE 0x1000
LOAD 0x002000 0x00010000 0x00008000 0x00056 0x00056 R E 0x1000
LOAD 0x003000 0x00018000 0x00028000 0x03ffe 0x03ffe R E 0x1000
LOAD 0x007000 0x0001c000 0x00038000 0x03e60 0x03e60 R E 0x1000
LOAD 0x00b000 0x00020000 0x00048000 0x021b5 0x021b5 R E 0x1000
LOAD 0x00e000 0x00024000 0x00058000 0x0236a 0x0236a R E 0x1000
這段代碼的目的是爲了提取從$ SOMETHING輸出的每個十六進制地址,所以我可以做一些簡單的數學。由於這個文件變得更長(最多20行),它變得非常慢。
如果你知道一個有效的方式來分配OFFSET,VIRTADDR,PHYSADDR等變量,這將有很大的幫助!
+1,但你需要丟棄字段1到11.(OFFSET是字段12,而不是字段2) –
不,我不知道。 'read'分割字段與'cut -d \'不同。 –
我的不好;沒有看問題中的東西的內容 –