2013-07-22 73 views
2

我試圖讓用戶輸入一個值來查看文件中的特定列。有沒有辦法使用awk切換列,而無需在所有開關情況下重複自己?帶有Awk的輸入列

# Code: 

read -p 'Enter a column:' input 

for i in "$file_name"; do 
    cat "$i" | awk -v column="$input" '{ print $column }' 
done 

這裏有一個更好的解釋:

view_column() { 
    for i in "$file_name"; do 
    cat "$i" | awk -v col="$1" '{ print $col }' 
    done 
} 

print_menu() { 
    menu=('First' 'Last' 'Email' 'Exit') 
    for ((i=0; i<${#menu[@]}; i++)); do 
    printf "%2d. %s\n" "$((i+1))" "${menu[$i]}" 
    done 
} 

main() { 
    while true; do 
    clear 
    print_menu 
    read -p 'Enter a choice: ' choice 
    if (("$choice" == 4)); then 
     break 
    fi 
    view_column "$choice" 
    sleep 1.5 
    done 
} 
+0

是'$ input'預計是數字嗎? – hek2mgl

+0

是的,輸入代表一個整數。該文件包含四個字段,其中包含名字,姓氏,工作時間,電子郵件。 @ hek2mgl – theGrayFox

+0

然後@肯特的答案應該工作,作爲你的例子 – hek2mgl

回答

2

我不是100%肯定,我理解你的要求的權利,這是否對你的工作?

read -p 'Enter a column:' input 
awk -v column="$input" '{ print $column }' $filename 
+0

我擁有的文件是全球性的,所以我的代碼有效,但我有一個包含四個字段的文件:第一個,最後一個,小時和電子郵件。我想打開一個選擇。根據選擇,我應該找回相應的字段輸出。我無法想象一種不重複自己的方式。 – theGrayFox

+0

@ user520720對不起,我沒有得到你的問題.... :(你有4個字段,你的意思是,如果用戶輸入10的情況下?這需要檢查? – Kent

+0

我有點想出了一些東西在我腦海中我想重新編輯我的帖子 – theGrayFox

0

這會工作:

read -p "Enter column [1-4] " i; echo One Two Three Four | awk '{print $'$i';}' 

注意如何$i是單引號外(如果你仔細看),所以它的外殼內插數,如果$i執行awk腳本之前,把'{print $'$i';}'i == 3時變成'print $3;}'