2014-01-07 219 views
0

問題是我想從un archive tar文件(這很大,需要時間來解壓縮)中的文件'Institution'獲取一些信息,所以我嘗試這樣的命令:Shell:命令超時,得到輸出

timeout 0.5s awk '/FormattedDescription/{getline;print}' archivage001.1.tar 

0.5秒就夠了,所以它更快...

問題是,當我在一個cygwin提示直接執行的命令,它會打印出結果,但是當我嘗試在外殼文件中:

output=`timeout 0.5s awk '/FormattedDescription/{getline;print}' archivage001.1.tar` 
echo $output 

,或在提示符下執行這樣的:

`timeout 0.5s awk '/FormattedDescription/{getline;print}' archivage001.1.tar > output.txt` 

我會得到什麼,有沒有辦法得到的結果,因爲我需要後操作的結果。 謝謝!

回答

1

如果您的目標是在您找到所需的行時立即停止掃描存檔,請顯式退出awk命令,而不是依賴任意超時來終止該命令。我懷疑你可能會遇到緩衝問題。

output=$(awk '/FormattedDescription/ { getline; print; exit; }' archivage001.1.tar) 

搶界集線

output=$(awk '/PinnInstitutionPath/ {start=1}; 
       start {print}; 
       /MountPointList/ {exit}' archivage001.1.tar) 
+0

謝謝。我理解你是理想的,但我想得到的是/ PinnInstitutionPath /和/ MountPointList /之間的界限,並且該行的數量並不固定,所以我嘗試了你的代碼,「awk」/ PinnInstitutionPath /,/ MountPointList/{打印;退出;}'archivage001.1.tar「,它只是retour一行。 – user2889802

+0

'awk'不會返回那樣的行範圍;它對每個匹配模式的行應用一個操作。你應該真的把你真正想要做的事情放在問題中。 – chepner

+0

謝謝你的迴應。我學到了東西:) – user2889802