使用两个标准提取线

  • 本文关键字:两个 标准 提取 awk
  • 更新时间 :
  • 英文 :


希望有人可以教我如何完成此任务。

我认为这样做可能很不错,但是我确实是初学者。

我有一个像下面的文件(TAB分离,实际文件更大)。在这里,重要的列是第二和第九(文件的第一行中的235和15)。

S   235 1365    *   0   *   *   *   15  1   c81 592
H   235 296 99.7    +   0   0   3I296M1066I 14  1   s15018  1
H   235 719 95.4    +   0   0   174D545M820I    15  1   c2664   10
H   235 764 99.1    +   0   0   55I764M546I 15  1   c6519   4
H   235 792 100 +   0   0   180I792M393I    14  1   c407    107
S   236 1365    *   0   *   *   *   15  1   c474    152
H   236 279 95  +   0   0   765I279M321I    10-1    1   s7689   1
H   236 301 99.7    -   0   0   908I301M156I    15  1   s8443   1
H   236 563 95.2    -   0   0   728I563M74I 17  1   c1725   12
H   236 97  97.9    -   0   0   732I97M536I 17  1   s11472  1

我想通过指定第九列的值来提取行。目前,第二列将就像枢轴列。我的意思是枢轴列是,如果第二列具有相同的值,请将其视为一组数据。在线路集合中,所有线都需要在第九列中具有特定值。

因此,例如,如果我指定第九列" 14"one_answers" 15"。然后排出。

S   235 1365    *   0   *   *   *   15  1   c81 592
H   235 296 99.7    +   0   0   3I296M1066I 14  1   s15018  1
H   235 719 95.4    +   0   0   174D545M820I    15  1   c2664   10
H   235 764 99.1    +   0   0   55I764M546I 15  1   c6519   4
H   235 792 100 +   0   0   180I792M393I    14  1   c407    107

第6和8行在其第九列中具有" 15",但是"集合"中的其他行(第二列指定:236)具有" 14"或" 15"以外的其他值,因此我不想提取线条。

$ cat tst.awk
$2 != prevPivot { prtCurrSet() }
$9 !~ /^1[45]$/ { isBadSet=1 }
{ currSet = currSet $0 ORS; prevPivot = $2 }
END { prtCurrSet() }
function prtCurrSet() {
    if ( !isBadSet ) {
        printf "%s", currSet
    }
    currSet = ""
    isBadSet = 0
}
$ awk -f tst.awk file
S   235 1365    *   0   *   *   *   15  1   c81 592
H   235 296 99.7    +   0   0   3I296M1066I 14  1   s15018  1
H   235 719 95.4    +   0   0   174D545M820I    15  1   c2664   10
H   235 764 99.1    +   0   0   55I764M546I 15  1   c6519   4
H   235 792 100 +   0   0   180I792M393I    14  1   c407    107

不完全确定完整的要求,查看预期的输出,您可以尝试关注。

awk '$2 == 235 && ($9 == 14 || $9 == 15)'  Input_file

输出将如下。

S   235 1365    *   0   *   *   *   15  1   c81 592
H   235 296 99.7    +   0   0   3I296M1066I 14  1   s15018  1
H   235 719 95.4    +   0   0   174D545M820I    15  1   c2664   10
H   235 764 99.1    +   0   0   55I764M546I 15  1   c6519   4
H   235 792 100 +   0   0   180I792M393I    14  1   c407    107

awk 表达式:

awk '$2==235 && $9~/^1[45]$/' file

  • $9~/^1[45]$/-确保第9个字段匹配1415

最新更新