2013-07-22 42 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;}'