2014-10-01 89 views
1

我有一個腳本,針對一個文件運行,並從用戶獲取參數,並通過grep和awk發送以獲取所需的列。它會返回多行。我想要做的是通過grep | awk的輸出讀取(或類似的東西),並通過另一個腳本(./lookup)運行它。我的問題是我怎樣才能遍歷每一行,並通過腳本中的腳本來運行該行上的內容。希望這是有道理的,我是新手腳本和Linux。Bash Scripting-作爲輸入到另一個腳本的Grep/Awk輸出

#!/bin/sh 
x=$(grep "$*" "$c"|awk '{print $6}') 
while read LINE 
do 
./lookup $x 
done 

這似乎工作,但只對輸出的第一行。它還要求我按Enter鍵來獲取./lookup腳本的輸出。任何想法或幫助?謝謝!

回答

1

grepawk輸出到循環:

grep "$*" "$c" | awk '{print $6}' | while read LINE 
do 
    ./lookup "$LINE" 
done 

順便說一句,這不是通常需要同時使用grepawk,因爲awk可以做正則表達式匹配。所以,你可以寫:

awk -v re="$*" '$0 ~ re {print $6}' "$c" | while ... 

-v選項設置的awk變量,~運營商進行正則表達式匹配。 $0指的是整個輸入行。

+0

我覺得'$ *'這裏指的是參數列表,它會被shell插入 – luqui 2014-10-01 05:24:38

+0

我沒有意識到,謝謝!我推理使用$ *是爲了防止主要腳本(./find Los Angeles)輸入一個以上的單詞作爲參數。有沒有更簡單的方法來確保整個字符串通過? – swam 2014-10-01 05:28:23

+0

通常需要用戶將引數括在引號中,例如'./find'Los Angeles''。 – Barmar 2014-10-01 05:29:24

1

您還可以使用xargs的,而不是一個循環

另外,作爲barmar說有沒有需要的grep。

awk -va="$*" '$0~a{print $6}' "$C" | xargs ./lookup 
相關問題