2014-03-31 31 views
0

我需要從FTP輸出命令解析輸出中第100秒後的值。使用AWK從輸出解析值

ftp> 8.591220.98disconnect

從堆疊成員協助我一直在使用下列來獲取數據:

ut1intput=$(awk 'NR==70{for(i=1;i<=NF;i++)if($i=="ftp>")print $(i+1)} filename.txt) 

我使用sed剝離從輸出單詞「斷開」,但對於如何僅打印100秒的第二個輸出感到困惑,即:8.591220.98

awk這個任務的正確工具?

我會很感激任何建議。

+1

你說的'1/100秒output'的是什麼意思?你真的需要整個'8.591220.98'令牌,還是隻需要最後一個'.'後面的部分?鑑於'8.591220.98'不是一個有效的數字,它究竟代表什麼? – mklement0

回答

1

爲了解決只是眼前的問題:如果你需要的是從輸入數據中提取相同數量的令牌

,你可以簡單地使用tr如下:

tr -C -d '0-9.' <<<'ftp> 8.591220.98disconnect' # -> '8.591220.98' 

但它在@更有意義,所需要的操作整合到你原來的awk程序,用sub(),作爲哈康Hægland的回答是:

ut1intput=$(awk ' 
    NR==70 { 
    for(i=1;i<=NF;i++) { 
     if($i=="ftp>") { 
     sub(/disconnect$/, "", $(i+1)); # remove 'disconnect' suffix 
     print $(i+1) 
     } 
    } 
    }' filename.txt) 
+1

您不希望在'tr'中使用括號[[它們不是必需的]](http://pubs.opengroup.org/onlinepubs/009696899/utilities/tr.html),並且可能會導致意外的結果,具體取決於在問題的字符串和它的解析。考慮:'tr'.-''12'<<<'._ []?=''=>'1 _ []?='與'tr'[.-]''[12]'<<< '._ []?=''=>'1 _]]]]'。你只想把它們用於角色類。 –

+0

謝謝,@AdrianFrühwirth - 答案更新。 – mklement0

0

awk命令sub(/disconnect/,"", $i)將從字段編號$i中剝離字disconnect。例如:

echo "8.591220.98disconnect" | awk '{sub(/disconnect/,"", $1)}1' 

給出:

8.591220.98