gpt4 book ai didi

linux - 将 awk 输出通过管道传输到 grep

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:44 26 4
gpt4 key购买 nike

所以我正在编写一个 bash 脚本来按字母顺序列出文本文件中的名称,但只列出具有相同频率的名称(在第二列中定义)

grep -wi '$1' /usr/local/linuxgym-data/census/femalenames.txt |
awk '{ print ($2) }' |
grep '$1' /usr/local/linuxgym-data/census/femalenames.txt |
sort |
awk '{ print ($1) }'

因为我在类里面这样做,所以我得到了输入“ANA”的示例,应该返回

ANA

RENEE

文档中有大约 4500 行

但是我正在查看的两个字段有

ANA            0.120     55.989    181

RENEE 0.120 56.109 182

所以我想找到第二列与 ANA (0.120) 相同的所有名称。第二列是名字出现的频率……这只是我学校给我的虚拟数据,所以我不知道那是什么意思。但是,如果有另一个名称与 ANA (0.120) 具有相同的频率,它也会在输出中列出。

当我自己运行这些命令时,它们运行良好,但在它下面的 grep 中使用 awk 输出作为 $1 的第 3 行似乎有问题。

我对此很陌生,所以我很可能以最迂回的方式来做。

最佳答案

您可能可以在一行中完成此操作,但这有点费力。将它分成两部分,以便于编写/阅读。例如:

name=$1
src=/usr/local/linuxgym-data/census/femalenames.txt

# get the frequency you're after
freq=$(awk -v name="$name" '$1==name {print $2}' "$src")

# get the names with that frequency
awk -v freq="$freq" '$2==freq {print $1}' "$src"

此解决方案与 RomanPerekhrest 的解决方案之间的权衡是,他们的解决方案将执行一次扫描,但索引内存中的所有内容。这将扫描文件两次,但可以节省内存。

关于linux - 将 awk 输出通过管道传输到 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44174107/

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