filter.sh 892 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/bin/bash
  2. # 参数检查
  3. if [ $# -ne 3 ]; then
  4. echo "用法: $0 文件 列名或列号 比较值"
  5. exit 1
  6. fi
  7. file="$1"
  8. column="$2"
  9. value="$3"
  10. # 文件存在性检查
  11. if [ ! -f "$file" ]; then
  12. echo "错误: 文件 '$file' 不存在"
  13. exit 1
  14. fi
  15. # 列号解析逻辑
  16. if [[ "$column" =~ ^[0-9]+$ ]]; then
  17. col_num=$column
  18. else
  19. col_num=$(awk -F, -v col="$column" 'NR==1 {
  20. for(i=1; i<=NF; i++) {
  21. if(tolower($i) == tolower(col)) {
  22. print i
  23. exit
  24. }
  25. }
  26. }' "$file")
  27. if [ -z "$col_num" ]; then
  28. echo "错误: 列名 '$column' 未找到"
  29. exit 1
  30. fi
  31. fi
  32. # 执行筛选的AWK命令
  33. awk -F, -v col="$col_num" -v val="$value" '
  34. BEGIN { OFS=FS }
  35. NR == 1 {
  36. print
  37. next
  38. }
  39. col < 1 || col > NF {
  40. print "错误: 无效列号 "col | "cat >&2"
  41. exit 1
  42. }
  43. $col+0 > val+0
  44. ' "$file"