gpt4 book ai didi

awk - GNU 并行与 xargs 和 awk 一起使用

转载 作者:行者123 更新时间:2023-12-02 00:00:20 24 4
gpt4 key购买 nike

我有两个大的制表符分隔文件 A.tsv 和 B.tsv,它们看起来像(标题不在文件中):

A.tsv:  
ID AGE
User1 18
...

B.tsv:
ID INCOME
User4 49000
...

我想选择 A 中的 ID 列表,使得 10=< AGE <=20 并选择 B 中与列表匹配的行。我想使用 GNU 并行工具。我的尝试是两个步骤:
cat A.tsv | parallel --pipe -q awk '{ if ($3 >= 10 && $3 <= 20) print $1}' > list.tsv

cat list.tsv | parallel --pipe -q xargs -I% awk 'FNR==NR{a[$1];next}($1 in a)' % B.tsv > result.tsv

第一步有效,但第二步出现错误,例如:
awk: cannot open User1 (No such file or directory)

我怎样才能解决这个问题?即使 A.tsv 和 list.tsv 比内存大 2 到 3 倍,这种方法也有效吗?

最佳答案

$ for I in $(seq 8 2 22); do echo -e "User$I\t$I" >> A.txt; done; cat A.txt
User8 8
User10 10
User12 12
User14 14
User16 16
User18 18
User20 20
User22 22

$ for I in $(seq 8 2 22); do echo -e "User$I\t100${I}00" >> B.txt; done; cat B.txt
User8 100800
User10 1001000
User12 1001200
User14 1001400
User16 1001600
User18 1001800
User20 1002000
User22 1002200

$ cat A.txt | parallel --pipe -q awk '{if ($2 >= 10 && $2 <= 20) print $1}' > list.txt
$ cat B.txt | parallel --pipe -q grep -f list.txt
User10 1001000
User12 1001200
User14 1001400
User16 1001600
User18 1001800
User20 1002000

关于awk - GNU 并行与 xargs 和 awk 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737904/

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