【发布时间】:2020-09-07 13:57:00
【问题描述】:
我正在为一个基本的 awk 命令而苦苦挣扎。
文件 1:
AB253828.1
AB253829.1
AB253830.1
AB253831.1
文件 2:
accession accession.version taxid gi
A00001 A00001.1 10641 58418
A00002 A00002.1 9913 2
A00003 A00003.1 9913 3
A00004 A00004.1 32630 57971
A00005 A00005.1 32630 57972
A00006 A00006.1 32630 57973
A00008 A00008.1 32630 57974
A00009 A00009.1 32630 57975
A00010 A00010.1 32630 57976
两个文件都有 >1 000 000 行
如果第 2 列对应于文件 1 的模式,我想打印文件 2 的第 2 列和第 3 列 我尝试了很多可能性,但都没有奏效......
for ACC in $(cat file1.txt)
do
#ACC1=$(echo "\"$ACC\"")
awk -v OFS='\t'-v z="$ACC" '{ if($2 == z) { print $2,$3 } }' file2.txt
done
我明白了
awk: 无法打开 { if($2 == z) { print $2,$3 } } file2.txt(没有这样的文件或目录)
我检查了,file2 在那里。我想,我的问题是变量 z 但我找不到解决方案。
【问题讨论】:
-
欢迎来到 SO 并特别感谢您在问题中表现出的努力,您能否在您的问题中发布预期的示例输出并让我们知道,这将使我们更清楚地了解问题。
-
我在一个 100000 行的测试文件上测试了你的解决方案,10 分钟后我停止了它。下面@tripleee 的解决方案在大约 1.5 秒内完成..... ????
标签: awk