2017-02-19 91 views
0

我有一個文件user_list.txt,它有一個由「,」分隔的4個字段的表。例如,如何忽略awk命令中的空格

hi,hello,good morning,bye. 

我正在使用下面的命令來提取第三列字段。

output=$(awk 'BEGIN { FS = "," } ; { print $3 }' user_list.txt) 

當我嘗試檢查輸出變量。的內容,

echo ${output[0]} --> good 
echo ${output[1]} --> morning 

我想把它當作一個字符串 echo ${output[0]} --> good morning,但由於空格是默認的分隔符,該字符串被拆分。

請幫忙。

+4

使用bash和Gnu awk'echo $ output'和'echo $ output [0]'都會產生'早上好'。你想達到什麼目的? –

+2

看起來像這是一個Bash問題,而不是一個Awk問題,並且你想'echo $ {output}'。 –

+0

如果我使用($(awk'BEGIN {FS =「,」}; {print $ 3}'user_list.txt))來存儲它以輸出,那麼我得到。 echo $ {output [0]} - > good echo $ {output [1]} - >上午。 –

回答

1

在bash,命令讀取輸入到一個數組是mapfile

mapfile -t output < <(awk -F, '{print $3}' user_list.txt) 

for element in "${output[@]}" # <= the quotes are crucial here 
do 
    echo "have: $element" 
done 

如果輸入文件僅僅是一個單一的線,然後使用cut

output=$(cut -f, -d3 user_list.txt) 
echo "have: $output" 
0

這可以是用下面的命令實現。考慮將user_list.txt作爲輸入文件。

awk '{split($0,a,","); print a[3]}' user_list.txt 
0

像往常一樣,當您提供大部分圖片的一小部分時,很難正確回答。看來你想要做在bash一些與從第三列的值,那麼,什麼是錯用一個簡單的循環:

while IFS=, read -r _ _ item _ 
do 
    <do stuff with $item here> 
done<user_list.txt 

當然,我可能是錯的,問題是設計不當,使得它很難呈現一個實際的答案