检查col 1中的value1和col 4中的值4并打印整行bash

时间:2014-05-24 20:20:34

标签: bash awk find

我有data.txt个文件。

    1   2    3     4       5       6       7
    cat data.txt
1   10 100 1100 10.0000 10.1122 60.0000 60.1111 
2   11 110 1110 10.1122 10.3333 60.1111 61.3333
3   12 120 1120 10.3333 11.0547 61.3333 61.9999
4   13 130 1130 11.0547 11.1111 61.9999 62.4444
5   14 140 1140 11.1111 10.1122 62.4444 62.8888
6   15 150 1150 10.1122 10.3333 61.3333 61.9999 
7   16 160 1160 10.3333 11.1111 60.1111 61.3333
8   17 170 1170 11.0547 11.5555 61.3333 64.1111
9   18 180 1180 10.3333 11.1111 61.3333 61.3333
10  19 190 1190 11.0547 11.5555 60.1111 64.1111
11  20 200 1200 11.1111 10.1122 62.4444 62.8888

我希望从10.1122中的column 411.1111顺序查找所有值。值从60.1111 column 661.9999的{​​{1}}顺序排列。

' anubhava'和肯特'建议(谢谢!)使用

awk -v col=4 -v start=10.1122 -v end=11.1111 '$col>=start && $col<=end{ print $col}' data.txt | sort -nu

   1  10.1122 
   2  10.3333
   3  11.0547
   4  11.1111

awk -v col=6 -v start=60.1111 -v end=61.9999 '$col>=start && $col<=end{ print $col}' data.txt | sort -nu

   1  60.1111 
   2  61.3333
   3  61.9999

我想在results.txt文件中打印/保存

中的行
col4: 10.1122 && col6: 60.1111
col4: 10.3333 && col6: 60.1111
col4: 11.0547 && col6: 60.1111
col4: 10.1122 && col6: 61.3333
col4: 10.3333 && col6: 61.3333
col4: 11.0547 && col6: 61.3333

表示行 - &gt;

2   11 110 1110 10.1122 10.3333 60.1111 61.3333
6   15 150 1150 10.1122 10.3333 61.3333 61.9999 
7   16 160 1160 10.3333 11.1111 60.1111 61.3333
8   17 170 1170 11.0547 11.5555 61.3333 64.1111
9   18 180 1180 10.3333 11.1111 61.3333 61.3333
10  19 190 1190 11.0547 11.5555 60.1111 64.1111

有什么建议吗?这就是为什么我期望将awk结果存储在array1和array2中,以便找到col4值和col6值存在的行。

感谢。

1 个答案:

答案 0 :(得分:1)

这一行应该:

awk -v f4=10.1122 -v t4=11.1111 -v f6=60.1111 -v t6=61.9999 
      '$4>=f4&&$4<=t4&&$6>=f6&&$6<=t6' file

结果是:

11 110 1110 10.1122 10.3333 60.1111 61.3333
12 120 1120 10.3333 11.0547 61.3333 61.9999
13 130 1130 11.0547 11.1111 61.9999 62.4444
15 150 1150 10.1122 10.3333 61.3333 61.9999 
16 160 1160 10.3333 11.1111 60.1111 61.3333
17 170 1170 11.0547 11.5555 61.3333 64.1111
18 180 1180 10.3333 11.1111 61.3333 61.3333
19 190 1190 11.0547 11.5555 60.1111 64.1111

请注意,根据您定义的条件:以12 and 13开头的行也应该在输出中。

此外,行号是由您添加的,但不在文件中吗?否则column4将是column5 ...所以我只删除了第一个行号列。