我有一个 awk 脚本,想打印随机记录

我有一个 awk 脚本,想打印随机记录

我有一个 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”有印刷:)

相关内容