用Awkinput列

我试图让用户input一个值来查看文件中的特定列。 有没有办法使用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 } 

我不是100%肯定我理解你的要求是正确的,这是否适合你?

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

这将工作:

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

注意$i是如何在单引号之外的(如果仔细观察),所以它在执行awk脚本之前插入了数字if $i ,把'{print $'$i';}'变成'print $3;}'i == 3