gpt4 book ai didi

python - 如何使用 grep 但没有 for 循环在 shell 脚本中执行以下任务?

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:16 25 4
gpt4 key购买 nike

我有一个文件,比如 A.txt,它大约有 80,000 行,但有 2 个字段。示例行如下所示:

utt1 f 
utt2 f
utt3 m
utt4 f

我有第二个文件 B.txt,它的行数比 A.txt 多得多,并且有两个字段。示例行如下所示

utt1_1 somethingHere    
utt1_2 somethingElse
utt2_1 someText
utt2_2 somemore
utt2_3 someMore
utt3_1 someText
utt4_1 somemore
utt4_2 abcd
utt4_3 aanan

B.txt 中的第一个字段与 A.txt 中的第一个字段基本相同,后跟_something(每行重复可变次数)。

我的任务是制作一个看起来像这样的文件

utt1_1 f    
utt1_2 f
utt2_1 f
utt2_2 f
utt2_3 f
utt3_1 m
utt4_1 f
utt4_2 f
utt4_3 f

'f' 和 'm' 以性别开头。换句话说,我想做的是从 A.txt 中获取 utt 和性别信息,并为 B.txt 中的话语获取 grep,并用正确的性别映射第一个字段。我正在使用 while 循环执行此操作,如下所示:

while read utt gen; do
grep $utt B.txt | awk -v gen=$gen '{print $1" "gen}'
done < A.txt

因为我在循环中执行此操作并且 A.txt 的长度很大,所以需要花费大量时间才能完成任务。你能建议我使用 bash 的更快方法吗?

谢谢

最佳答案

这是为 awk 2 文件处理量身定制的工作:

awk 'FNR == NR {a[$1] = $2; next} $1 in a {print $1 "_" $2, a[$1]}' file1 FS='[_ ]' file2
utt1_1 f
utt1_2 f
utt2_1 f
utt2_2 f
utt2_3 f
utt3_1 m
utt4_1 f
utt4_2 f
utt4_3 f

参数 file1 FS='[_ ]' file2 设置输入字段分隔符 _ 或仅用于 file2 的空格。

引用: Effective AWK Programming

关于python - 如何使用 grep 但没有 for 循环在 shell 脚本中执行以下任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369989/

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