2

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

2 回答 2

2

我不是 100% 确定我理解您的要求是否正确,这对您有用吗?

read -p 'Enter a column:' input
awk -v column="$input" '{ print $column }' $filename
于 2013-07-22T21:30:31.190 回答
0

这会起作用:

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

请注意$i单引号之外的情况(如果仔细观察的话),因此外壳会$i在执行 awk 脚本之前插入数字 if ,'{print $'$i';}'变成'print $3;}'when i == 3

于 2013-07-23T08:35:15.043 回答