将1 txt文件中的值附加到另一个文件时,用awk删除空格?

时间:2016-03-27 02:39:24

标签: linux unix

我有2个文本文件。 “A.txt”包含

A 1 AB ... 1 5 -3 4.5 (contains 11 columns. So "4.5" is in the 11th column)
A 2 BC ... -2 3 8 9.2
A 3 WE ... 2 3 8 5.2
A 4 RT ...  23 2 24 4.1 
...
END

“B.txt”类似,只是最后的2列与“A.txt”的列不同。另一个区别是“B.txt”包含一些不在“A.txt”中的附加行。例如,第三行A 3 QEW ... 5 23 34 5位于“B.txt”但不包含在“A.txt”中

A 1 AB ... 1 5 4 9
A 2 BC ... -2 3 1 0
A 3 QEW ... 5 23 34 5
A 4 WE ... 2 3 -7 56
A 5 RT ...  23 2 -5 14 
...
END

我想要做的是提取“A.txt”每行中最后一列的值,并将其附加到“B.txt”中的相应行。并且对于“B.txt”中不在“A.txt”中的每一行,如果第3列元素以字母“Q”开头(例如,QEW),则我想要附加值1,否则返回值2 。所以输出应该看起来像

A 1 AB ... 1 5 4 9 4.5
A 2 BC ... -2 3 1 0 9.2
A 3 QEW ... 5 23 34 5 1 
A 4 WE ... 2 3 -7 56 5.2
A 5 RT ...  23 2 -5 14 4.1
...
END

以下awk命令有效:

NR==FNR{
    arr[$3] = $11
    next
}
{
    if ($3 in arr){
        print($0, arr[$3])
    }else if ($3 == "^Q"){
        print($0, "2")
    }else{
        print($0, "1")
    }
}

随着

awk -f script.awk f1 f2

唯一的问题是我得到的输出是

A 1 AB ... 1 5 4 9
 4.5
A 2 BC ... -2 3 1 0
 9.2
A 3 QEW ... 5 23 34 5
 1
A 4 WE ... 2 3 -7 56
 5.2
A 5 RT ...  23 2 -5 14
 4.1
...
END

这是错误的,因为最后一列中的值应该在这样的新行中输入。我怎样才能解决这个问题?是否有其他命令我可以使用而不是我列出的命令?

1 个答案:

答案 0 :(得分:0)

您的代码和规范与Q不匹配,无论如何,这是一个有效的脚本

$ awk 'NR==FNR{a[$3]=$NF; next}
       $3 in a{print $0, a[$3]; next} 
              {print $0, ($3~/^Q/)?1:2}' f1 f2

print通常不是作为函数编写的,更惯用的是print $0,1也不需要引用1和2。