【发布时间】:2021-07-17 08:06:30
【问题描述】:
我有三个文件,想在两个文件之间逐行比较每个元素,并想应用条件语句。
file1 示例
Aa 1.3
Ca 1.1
Ba 0.8
Da 0.65
Fa 0.63
Ea 0.6
Za 0.4
Ha 0.1
文件 2 示例
Ca Ba Da Fa Ea Za Ha
Aa Ca Ba Da Fa Ea
文件 3 示例
Fa Ca Za
Ha Ca Ba Da
现在我想逐行比较 file2 和 file3 的元素。如果 file2 的特定行的元素存在于文件 3 的同一行中,则执行其他任务。
我试过了,但没有成功
NG=`cat file1 | awk 'END{print NR}'`
awk -v N="$NG" '
FNR==NR{
a[$0]=$0
next
}
{
for(i=1;i<=NF;i++){
if($i in a){
print sqrt((N-M)/M)
}
else
{
print -sqrt(M/(N-M))
}}
}' file2 file3
其中 N 是 file1 中的行数,M 是 file3 特定行中的字段数。文件2 所以我预期的输出文件就像
1.29099 -0.774597 -0.774597 1.29099 -0.774597 1.29099 -0.774597
-1 1 1 1 -1 -1
【问题讨论】:
-
您将整行存储到数组中,但按单个字段查找。对于给定的输入,
$i in a总是会失败。 -
在预期输出中,第 1 行的第 4 个值应该是 2?
-
file1与手头的任务有什么关系?N可能只是一些数字;它来自哪里似乎并不特别重要。 -
没错,对文件的处理没有任何意义。只是一个用于计算的值。
-
@EdMorton 我按照建议对预期输出进行了更改
标签: python-3.x shell awk