2014-05-01 216 views
2

這是Read from file into variable - Bash Script成變量 - bash腳本TAKE2

第二部分我有一個bash腳本,在文件中解析讀取的字符串,並將其分配給一個變量。該文件看起來像這樣(file.txt的):

database1 table1 
database1 table4 
database2 
database3 table2 

在腳本中使用AWK:

s=$(awk '{$1=$1}1' OFS='.' ORS='|' file.txt) 
LIST="${s%|}" 

echo "$LIST" 
database1.table1|database1.table4|database2|database3.table2 

但我需要在每個字符串的末尾添加一些通配符。我需要這樣的結果:

database1.table1.*|database1.table4.*|database2*.*|database3.table2.* 

的條件是:如果我們讀DATABASE2輸出應該是DATABASE2 *如果我們讀取的數據庫和表格輸出應該是database1.table1 *

回答

0

。使用此AWK與ORS='.*|'

s=$(awk '$0=="database2"{$0=$0 "*.*";print;next} {$2=$2 ".*"}1' OFS='.' ORS='|' file.txt) 
LIST="${s%|}" 

echo "$LIST" 
database1.table1.*|database1.table4.*|database2*.*|database3.table2.* 
+1

這非常接近。但是OP正在尋找'database2 *。*'而不是'database2。*',儘管我對他的預期輸出有懷疑。 –

+1

是的,我有同樣的懷疑,因爲'database2。*'似乎更正確的正則表達式 – anubhava

+0

這是正確的。我正在尋找database2 *。*而不是database2。* – andresg3

0

假設(有點奇怪)正則表達式是正確的以下awk腳本對我的作品在您的示例輸入。

BEGIN {OFS="."; ORS="|"} 
!$2 {$1=$1"*"} 
{$(NF+1)="*"} 
1 
  1. 設置OFSORS
  2. 如果我們沒有第二個字段,請在我們的第一個字段中添加*
  3. 添加一個*作爲最終字段。
  4. 打印此行。

awk -f script.awk inputfile運行,其中上述腳本位於script.awk(或其他)文件中。

+0

您是從哪裏閱讀文件的? – andresg3

+0

@ andresg3這只是awk腳本本身。對不起,如果不清楚。 –