2017-01-22 87 views
-1

我有一個for循環,循環幾行。每行有兩個字符串與標籤分離它們e.g對包含帶有製表符的字符串的變量grep

chr11 105804693 
當我通過可變與文件到grep來搜索在它返回 "105804693: No such file or directory"

。我的代碼如下所示:

for line in $(cat list_of_lines); do grep $ line file_to_search_in >> output_file; 做

我試圖printf的變量,它返回"chr11"但是當我附和變量,它返回"chr11 105804693"

我如何可以調用的變量grep和有它搜索全行?

+2

請將您的代碼添加到您的問題。 – Cyrus

+2

如果您從循環體調用'grep',可能會有更好的解決方案,只涉及調用'grep'一次。 – chepner

+2

wrt'我有一個for循環,循環幾行 - - 第一句標識你的問題的根源。請參閱[爲什麼要使用shell循環處理文本被認爲是壞習慣](http://unix.stackexchange.com/questions/169716/why-is-using-a-shell回到流程文本被認爲是不好的做法) –

回答

2

您可能還沒有添加在你的變量具有搜索模式引號,

search_pattern_variable="chr11 105804693" 
grep "$search_pattern_variable" input-file 

由於您的變量有詞chr11 105804693shell分裂的話爲多個單詞,默認IFS(場分離器),並使用chr11作爲模式,使用105804693作爲文件名,它報告沒有看到這樣的文件。

請參閱Word-Splitting的含義bash

+3

變量引用應該總是被雙引號。這是shell腳本中最常見的初學者錯誤之一。 [shellcheck.net](http://www.shellcheck.net/)(建議,BTW)會自動將非雙引號變量引用標記爲錯誤。 –

+0

感謝shellcheck.net。它看起來非常有用。 – Amos