2013-02-16 21 views
1

我將定時執行結果輸出到已運行10次的文件。我一直在一個文件中,我需要從這個文件中找到最佳,最差和平均用戶時間。我正在考慮使用awk的組合來打印第一列,但我不確定如何從行中去除「用戶」,所以我可以用數字排序。使用bash腳本從字母數字文本文件檢索數字

此外,我需要擺脫偶數行,因爲他們有關於輸入和輸出的信息以及與這些計算無關的事情。 時間文件的樣品低於:

1.12user 0.00system 0:01.12elapsed 99%CPU (0avgtext+0avgdata 5408maxresident)k 
0inputs+0outputs (0major+398minor)pagefaults 0swaps 

沒有人有我將如何做到這一點的任何想法?

任何幫助,將不勝感激!謝謝。

+0

你可以一次性得到最好的,最差的,平均的。更新的答案。 – Kent 2013-02-16 23:58:31

回答

1

這是適合你嗎?

awk -F'user' 'NR%2{print $1}' file 

一個例子:

kent$ cat file 
1.11user 0.00system 0:01.12elapsed 99%CPU (0avgtext+0avgdata 5408maxresident)k 
0inputs+0outputs (0major+398minor)pagefaults 0swaps 
1.10user 1.00system 0:01.12elapsed 99%CPU (0avgtext+0avgdata 5408maxresident)k 
0inputs+0outputs (0major+398minor)pagefaults 0swaps 
1.12user 2.00system 0:01.12elapsed 99%CPU (0avgtext+0avgdata 5408maxresident)k 
0inputs+0outputs (0major+398minor)pagefaults 0swaps 
1.13user 3.00system 0:01.12elapsed 99%CPU (0avgtext+0avgdata 5408maxresident)k 
0inputs+0outputs (0major+398minor)pagefaults 0swaps 

kent$ awk -F'user' 'NR%2{print $1}' file 
1.11 
1.10 
1.12 
1.13 

即使這個可能?

awk -F'user' 'NR%2{a[++i]=$1;s+=$1}END{asort(a);print "best: "a[1];print "worst: "a[length(a)];print "avg: "s/length(a)}' file 

上面的例子將輸出:

best: 1.10 
worst: 1.13 
avg: 1.115 
+0

是的!非常感謝!我一有信譽就會投票。 – AHalbert 2013-02-16 23:57:34

+0

出於好奇之後,在排序列表後,有沒有一種方法可以打印出最好和最差的頭部和尾部?我想我已經開始工作了,但是每個人都打印01約10次。奇 – AHalbert 2013-02-17 00:33:23

0
tr -s ' ' '[:alpha:]' < inputfile | awk '{print $1, $2, $3} ' > newfile 

還有其他變化可以做同樣的事情。

+0

我試過了,它會返回:'tr:在翻譯時,可能出現在 string2中的唯一字符類是'upper'和'lower'' ' – AHalbert 2013-02-16 23:52:06

0

如果你只在最初的數#user感興趣。

cat txt | paste - - | cut -d' ' -f1 | tr -d "[:alpha:]" | sort -n 

給出:

1.12 
1.13 
1.14 
1.15 
1.16 

我與你的數字TXT的例子改變來證明排序。

相關問題