读行时,awk $line [英] While read line, awk $line

查看:23
本文介绍了读行时,awk $line的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含数字列表的文件.我有第二个文件,每个文件都有不同的条目和几个字段.

I have a file that contains a list of numbers. I have a second file with various entries and several fields each.

我想要做的是获取第 12 个字段等于第一个数字的所有行,并将它们放在一个新文件中,然后放到第二个数字中,依此类推.

What I want to do is to get all the lines whose 12th field is equal to the 1st number and place them in a new file, then to the second number, and so on.

我写了一个有意义的单行,但我不明白为什么它不起作用.

I wrote a one-liner that makes sense, but I can't figure out why it won't work.

这是数字列表:

cat truncations_list.txt

3
318
407
412
7

包含要排序的条目的文件是:

The file with the entries to be sorted is:

<代码> M00970:45:000000000-A42FD:1:1101:14736:1399 TGCCCAGTGCTCTGAATGTNNNNNTGAAGAAATTCAAGTAAGCGCGGGTCATCGGCNGGAGTAACTATGACTCTNTTAAGGAGGACCAATATGAACCANACNNNNNNNNNACTNTATCTAGGGTTCCCTGCACAGTATGTGNCC 79 TGCCCAGTGCTCTGAATGTNNNNNTGAAGAAATTCAAGTAAGCGCGGGTCATCGGCNGGAGTAACTATGACTCTNTTAA 65 GGAGGACCAATATGAACCANACNNNNNNNNNACTNTATCTAGGGTTCCCTGCACAGTATGTGNCC 79S65M 1 81 TGCCCAGTGCTCTGAATGTNNNNNTGAAGAAATTCAAGTAAGCGCGGGTCATCGGCNGGAGTAACTATGACTCTNTTAAGG -2 318M00970:45:000000000-A42FD:1:1101:15371:1399 TGCCCAGTGCTCTGAATGTNNNNNTGAAGAAATTCAAGTAAGCGCGGGTCAACGGCNGGAGTAACTATGACTCTNTTAAGGAGTCGGTGTTCACATGCNATNNNNNNNNNCAGNCGAACTTGATGAAGAACGTCGACGTGTNGG 83 TGCCCAGTGCTCTGAATGTNNNNNTGAAGAAATTCAAGTAAGCGCGGGTCAACGGCNGGAGTAACTATGACTCTNTTAAGGAG 61 TCGGTGTTCACATGCNATNNNNNNNNNCAGNCGAACTTGATGAAGAACGTCGACGTGTNGG 83S61M 1 81 TGCCCAGTGCTCTGAATGTNNNNNTGAAGAAATTCAAGTAAGCGCGGGTCAACGGCNGGAGTAACTATGACTCTNTTAAGG 2 407

这是我的命令:

file="truncations_list.txt"
while read line; do awk '$12==$line' R2_Output.txt >reads_$line.txt ; done <"$file"

此命令将创建所有文件reads_412.txt"等,但所有文件都是空的.

This command will create all the files "reads_412.txt", etc, but all the files are empty.

感谢您的帮助!

推荐答案

你的主要问题是 awk 程序是单引号,所以$line"变量永远不会被扩展.快速修复是

Your main problem is that the awk program is in single quotes, so the "$line" variable is never expanded. The quick fix is

awk -v num=$line '$12==num' R2_Output.txt

但是,不要那样做.您正在为数字文件中的每一行读取一次输出文件.您只需通读一次每个文件即可使其工作:

But, don't do that. You're reading the output file once for each line in the numbers file. You can make it work by just reading through each file only one time:

awk '
    # read the list of numbers in truncations_list
    FNR == NR {
        num[$1]
        next
    }

    # process each line of the output file
    # any lines with an "unknown" $12 will be ignored
    $12 in num {
        f = "reads_" $12 ".txt"
        print >> f
    }
' truncations_list.txt R2_Output.txt

这篇关于读行时,awk $line的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆