gpt4 book ai didi

linux - 如何从外部源向 awk 提供值?

转载 作者:太空宇宙 更新时间:2023-11-04 11:05:33 26 4
gpt4 key购买 nike

我有以下脚本:

#!/bin/sh

# this script splits a big CSV file, by 2nd column.
# the results will be as many CSV files as distinct values exist in original file, in the 2nd column.

PO_list=$(awk -F";" '{print $2}' test.csv | awk '!seen[$0]++')

for i in $PO_list;
do
cat test.csv | grep $i > "fisier_"$i.csv
done

它工作正常,但我不想通过将特定列硬编码到脚本中来限制用户,而是让他选择要用于拆分的列号。为此,我想将列号作为参数提供给调用 shell 脚本的命令。例如,此时此刻,我正在执行脚本:

abc$ ./test.sh

但我想执行它

abc$ ./test.sh 2

其中“2”作为参数传递给 awk 命令,从中重新计算“$2”值。

有人可以帮忙吗?

谢谢,

最佳答案

您可以使用 -v 开关将变量传递给 awk:

awk -v col=2 '{print $col}'

会做你想做的。

因此在您的脚本中,您可以使用 $1 的值(脚本的第一个参数),例如:

PO_list=$(awk -F";" -v col="$1" '!seen[$col]++ {print $col}' test.csv)

请注意,我还将您的两个 awk 命令合并为一个。

我认为您实际上可以在 awk 中完成所有事情:

awk -F";" -v col="$1" '{ print > "fisier_"$col".csv" }' test.csv

关于linux - 如何从外部源向 awk 提供值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25421367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com