如何在shell函数中将列号作为参数传递

ahy6op9u  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(162)

我是新的Lunix,我试图写一个函数,它需要3个参数输入数据,输出数据,和选定的列
功能:读取输入数据,写入并删除所选列的重复行,并保存输出数据。
如果我按命令那样做,那就成功了

cat new_trans.txt | awk -F',' '\!seen[$1]++ { print $1}' > test

bash ./shell_fn.sh testA new_trans.txt test_new_trans.txt $1

testA() {
  col = $3
  cat $1 | awk -F',' '\!seen[\$$col]++ { print \$$col}' > $2
  cat $2 | head
}

"$@"
xam8gpfp

xam8gpfp1#

testA() {
  col="$3"
  awk -F ',' -v c="$col" '!seen[$c]++ { print $c }' "$1" > "$2"
  head "$2"
}

我改变的事情:

  1. col赋值中不允许有空格
    1.您可以直接将文件名传递给这些命令,而不是从cat进行管道传输
    1.因为我们使用单引号',反斜杠是不必要的
    1.引用变量以避免变量中有空格时出现问题
    1.声明一个变量c,它位于awk脚本中,等于col

相关问题