【问题标题】:Input Columns with Awk使用 Awk 输入列
【发布时间】:2023-03-07 16:10:01
【问题描述】:

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

【问题讨论】:

  • $input 应该是数字吗?
  • 是的,输入代表一个整数。该文件包含四个字段,其中包含名字、姓氏、工作时间、电子邮件。 @hek2mgl
  • 那么@Kent的回答应该可以,就像你的例子
  • 我在重新编辑时想出了一个解决方案,但我现在不知道如何验证空列。 @hek2mgl

标签: linux bash shell unix scripting


【解决方案1】:

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

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

【讨论】:

  • 我拥有的文件是全局的,所以我拥有的代码可以工作,但我有一个包含四个字段的文件:第一、最后、小时和电子邮件。我想打开一个选择。根据选择,我应该取回适当的字段输出。如果不重复自己,我就是想不出办法。
  • @user520720 抱歉,我不明白你的问题是什么...... :( 你有 4 个字段,你的意思是用户输入 10 的情况?这需要检查吗?
  • 我脑子里想了一些关于我想要完成的事情。我重新编辑了我的帖子。
  • 我很确定awk "{ print \$$input }" $filename 也可以。
  • 我想我明白了,看看有什么我可以做得更好的吗? @D.Shawley
【解决方案2】:

这可行:

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

注意$i 是如何在单引号之外的(如果你仔细观察的话),所以 shell 在执行 awk 脚本之前会插入数字 if $i,当 i == 3 时将 '{print $'$i';}' 转换为 'print $3;}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2022-08-02
    相关资源
    最近更新 更多