我尝试在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).将括号中的整个索引序列(以逗号分隔)写为左操作数:
Run Code Online (Sandbox Code Playgroud)(subscript1, subscript2, ...) in array
我尝试修改脚本来创建一个真正的多维数组:
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) 我正在使用python对某些数据集进行一些分析,并且此过程会生成庞大的列表/词典,这些列表/词典最多会消耗多达30%top
的RAM(如所报道)(24GB)。大约有400个此类数据文件,每个文件都必须进行处理。因此,我一次不能运行两个以上的作业(否则我的系统挂起)。完成每个文件的分析需要几分钟,而整个数据需要将近两天。
唯一的解决方案是使用并行处理并实现它,我需要创建将执行任务的函数。
第一步保持不变-打开文件,读取,拆分并存储为列表。通常,我在列表上进行分析-获取另一个列表,然后删除前一个列表以节省内存。但是,如果使用多重处理,则必须将此列表作为参数传递给某些函数。
global
成为可能吗?例:
# 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])
一个非常基本的问题:我观察到给予新过程的PID不断增加.截至目前,当我键入ps
pid ps
为48564时(当我ps
再次执行时,它获得+1值)
文件中给出的限制/proc/sys/kernel/pid_max
为65536.
那么如果我达到这个限制会发生什么.是否重用了已终止进程的PID?