小编WYS*_*WYG的帖子

awk中的多维数组

我尝试在awk中创建一个伪多维数组.

# Calculate cumulative context score

BEGIN { FS=OFS="\t" }

{
        a[$2+FS+$7,$3]+=$6
}

END { for (i,j) in a
        { print i,j,a[i,j] }

}
Run Code Online (Sandbox Code Playgroud)

输出:

awk: ccstscan.awk:9: END { for (i,j) in a
awk: ccstscan.awk:9:             ^ syntax error
Run Code Online (Sandbox Code Playgroud)

这是GNU awk手册中提到的内容:

要测试多维数组中是否存在特定索引序列,请使用用于单维数组的相同运算符(in).将括号中的整个索引序列(以逗号分隔)写为左操作数:

 (subscript1, subscript2, ...) in array
Run Code Online (Sandbox Code Playgroud)

我尝试修改脚本来创建一个真正的多维数组:

BEGIN { FS=OFS="\t" }

{
    a[$2+FS+$7][$3]+=$6
}

END { for i in a
    {
     for j in a[i]
        { print i,j,a[i][j]
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我用gawk跑了.它也给出了一个错误:

gawk: ccstscan.awk:6:   a[$2+FS+$7][$3]+=$6
gawk: ccstscan.awk:6:              ^ syntax error …
Run Code Online (Sandbox Code Playgroud)

awk gawk multidimensional-array

5
推荐指数
1
解决办法
5136
查看次数

将传递给函数的对象用作参数,使其重复

我正在使用python对某些数据集进行一些分析,并且此过程会生成庞大的列表/词典,这些列表/词典最多会消耗多达30%top的RAM(如所报道)(24GB)。大约有400个此类数据文件,每个文件都必须进行处理。因此,我一次不能运行两个以上的作业(否则我的系统挂起)。完成每个文件的分析需要几分钟,而整个数据需要将近两天。

唯一的解决方案是使用并行处理并实现它,我需要创建将执行任务的函数。

第一步保持不变-打开文件,读取,拆分并存储为列表。通常,我在列表上进行分析-获取另一个列表,然后删除前一个列表以节省内存。但是,如果使用多重处理,则必须将此列表作为参数传递给某些函数。

  1. 这会复制列表,即消耗两倍的内存吗?
  2. 将原始变量传递给函数后,是否可以从函数内部删除该变量?使变量global成为可能吗?
  3. 在这种情况下,还有其他方法可以节省内存吗?

例:

# OPEN FILE #
f=open(args.infile,'r')
a=f.read()
f.close()
mall=findall('[^%]+',a)
del a
lm=len(mall)
m=[]
for i in range(args.numcores):
    if i<args.numcores-1:
        m[i]=mall[i*args.numcores:(i+1)*args.numcores]
    else:
        m[i]=mall[i*args.numcores:lm]
del mall
Run Code Online (Sandbox Code Playgroud)

然后将其传递给函数 fun(<list>)

在这种情况下,对于每个过程: fun(m[i])

python memory-management multiprocessing

4
推荐指数
1
解决办法
825
查看次数

在任何时候都可以重复使用旧的pid吗?

一个非常基本的问题:我观察到给予新过程的PID不断增加.截至目前,当我键入pspid ps为48564时(当我ps再次执行时,它获得+1值)

文件中给出的限制/proc/sys/kernel/pid_max为65536.

那么如果我达到这个限制会发生什么.是否重用了已终止进程的PID?

linux pid

0
推荐指数
1
解决办法
182
查看次数