我有一个文件,比如 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 的空格。
