awk或sed根据另一个输入文件更改文件的字段



我有一个稀疏矩阵("matrix.csv"),有10k行和22列(第一列是"user",其余列称为"槽"并且包含0或1),像这样:

user1,0,0,0,1,0,0,0,1,0,1,0,0,...,0
user2,0,1,0,0,0,0,0,0,0,0,0,1,...,0
user3,0,0,0,0,0,0,1,0,0,0,1,0,...,0
...

一些包含"0"应该更改为包含&;1&;。我还有另一个文件("slots2change.csv"),它告诉我应该更改哪些插槽,如下所示:

user1,3
user3,21
...

对于user1,我需要将slot3改为包含"1"而不是"0",对于user3,我应该将slot21更改为包含"1"而不是"0"等等。

预期结果:

user1,0,0,1,1,0,0,0,1,0,1,0,0,...,0
user2,0,1,0,0,0,0,0,0,0,0,0,1,...,0
user3,0,0,0,0,0,0,1,0,0,0,1,0,...,1
...

如何使用awk实现此目标?或sed

?尝试

awk -F"," 'NR==FNR{user=$1;slot2change=$2} NR!=FNR; /user/ slot2change==0{print $0} ' slots2change.csv matrix.csv 

但我觉得我离正确的命令还很远…

像这样:

awk 'BEGIN{FS=OFS=","}
NR==FNR{arr[$1]=$2;next}
NR!=FNR {for (i in arr)
if ($1 == i) {
F=arr[i] + 1
$F=1
}
print
}
' slots2change.csv matrix.csv

相关内容

  • 没有找到相关文章

最新更新