gpt4 book ai didi

linux - 将值从 1 个 txt 文件附加到另一个文件时,使用 awk 删除空间?

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:14 24 4
gpt4 key购买 nike

我有 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”类似,只是最后两列与“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

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

最佳答案

您的代码和规范与 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。

关于linux - 将值从 1 个 txt 文件附加到另一个文件时,使用 awk 删除空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36243273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com