我有一个 awk 脚本,它接收一些参数并根据这些参数过滤给定 csv 文件中的数据。
有 2 个输出:
- 首先,它写入一个 .csv 文件,其中包含与参数匹配的所有记录。
- 然后,它仅打印引用记录名称的字段 $2。但它应该是 20 条记录的随机子集。
到目前为止,我已经这样做了:
我这样调用脚本:./Script.awk ARG1=20 ARG2="AAA" ARG3=1900 数据.csv
#! /usr/bin/awk -f
# Define FS
BEGIN {FS=OFS = ","}
$4 > ARG1 && $8 == ARG2 && $20 > ARG3 { print > "filtered_data.csv" ; print $2 }
所以,它正确创建过滤后的数据文件并打印 $2,但有很多记录,因此我只想打印随机子集。那么,知道如何才能做到吗?
谢谢!!
答案1
#!/usr/bin/env bash
out='filtered_data.csv'
awk -F, '$4 > ARG1 && $8 == ARG2 && $20 > ARG3' "$@" > "$out" &&
cut -d, -f2 "$out" | shuf -n20
但是,再次选择有意义的变量名称而不是 ARG1 等。
答案2
编辑:我在埃德·莫顿的回答之前发布了这一点,这显然更好。
我把它留在这里以防对其他人有用。
好吧,实际上很简单......我会回答自己,以防有人需要它! 工作脚本按预期工作:
#! /usr/bin/awk -f
# Define FS
BEGIN {FS=OFS = ","}
$4 > ARG1 && $8 == ARG2 && $20 > ARG3 { print > "filtered_data.csv" ; print $2 | "shuf -n20"}
只需要管道“舒夫-n20”有印刷:)