2014-09-23 112 views
0

我想從文件讀取每行輸入,取一個特定的單詞(用分隔符分隔)並將其分配給一個變量。從文件中讀取每一行輸入並分配給一個變量

cat Number 
Number11,Number21,Number31 
Number12,Number22,Number32 
Number13,Number23,Number33 

我用下面的代碼:

while 
read LINE 
do 
var1=$(echo $LINE|awk -F, '{ print $1 }') 
echo $var1 
done < Number|awk -F\, '{ print $1 "," $2 }'|head -2 

我所要的輸出是:

Number11 
Number12 
Number13 

但我得到的輸出:

Number11, 
Number12, 
Number13, 

我得到不需要的逗號(,)。有人能糾正我嗎?

回答

3

回答很多次......

while IFS=, read -r n1 n2 n3 
do 
    #echo "=n1:$n1= =n2:$n2= =n3:$n3=" 
    echo "$n1" 
done < Number 
  • 它集IFS(輸入字段分隔符)以逗號
  • 讀取文件中的行由行
  • assing場(分裂by IFS)納入變量read的論點

個打印:

Number11 
Number12 
Number13 
+0

而且,由於只需要在第一場,'n3'可以作爲'n2'變量將吸收剩餘字段中刪除。 – 2014-09-24 00:17:10

2
#!/bin/bash 
#read the lines as array with delemiter as ',' 
while IFS=',' read -a line 
do 
    # echo the index zero of the array 
    echo "${line[0]}" 
done < Number 
0

cut也是這種情況下有用:

while read LINE; do 
    var1=$(cut -d ',' -f 1 <<< $LINE) 
    echo $var1 
done < Number 

輸出:

Number11 
Number12 
Number13 
+0

雖然'剪切'工作,沒有理由使用它,因爲'read'可以執行完全相同的場分裂,而不訴諸外部命令。 – chepner 2014-09-23 21:20:34

+0

誠然,這更多的是個人喜好。雖然這很好理解。 – 2014-09-23 21:24:24

0

嘗試下面的awk命令:

awk -F"," '{print $1}' Number 

這可以避免不必要的循環來逐行讀取文件,因爲awk無論如何都會逐行解析文件。使用awk的-F選項來指定分隔符。

既然你希望它是一個變量,試試這個:

for each in `awk -F"," '{print $1}' Number` 
do 
    echo $each 
done 
相關問題