2014-08-31 43 views
0

我目前正在讀取unix中三個字母字符串的文件,並想知道如何去製作行變量,以便我可以在代碼中grep它們...指定一行變量名稱Unix

我的想法是這樣的:

!#/bin/bash 

IFS='' 
while read line 
    do 
    code=$(line) 
    #This would be where I want to assign the line a variable 
    grep "$code" final.txt > deptandcourse.txt 
    #This is where I would want to grep according to that three letter string 
done < strings.txt 

示例文件(strings.txt):

ABC 
BCA 
BDC 

我希望把這些信件在變線,然後用grep的文件(final.txt )首先爲'ABC',然後是'BCA',然後是'BDC'

+1

'line'是一個變量了。你究竟是什麼意思? – 2014-08-31 04:53:37

+0

提供示例文本,以及如何輸出。 – Jotne 2014-08-31 05:13:44

回答

0

line是一個變量,您設置爲包含您在整個循環中讀取的每一行文件的內容,因此您不需要將其重新分配給另一個變量。有關在循環中使用read的更多信息,請參閱this page

此外,它看起來像你可能想要附加到deptandcourse.txt>>因爲使用>重定向將每次覆蓋文件。

也許這是你想要什麼:

while read -r line 
    do 
    grep "$line" final.txt >> deptandcourse.txt 
done < strings.txt 

由於@JohnZwinck在他的評論中建議:

grep -f strings.txt final.txt > deptandcourse.txt 

這似乎是最好的解決辦法。

你也可以使用awk來完成同樣的事情:

awk 'FNR==NR { 
    a[$0] 
    next 
} 
{ 
    for(i in a) 
     if($0 ~ i) 
      print 
}' strings.txt final.txt > deptandcourse.txt 
+0

謝謝!這是我想要做的! – user3875711 2014-08-31 05:17:32

+0

不客氣,很高興提供幫助。 – 2014-08-31 05:46:09

+2

@ user3875711:它有點像你真正想要的是這樣一行:'grep -f strings.txt final.txt'。沒有? – 2014-08-31 06:45:56

相關問題