我正在编写一个 shell 脚本程序,我在其中内部调用一个 awk 脚本。下面是我的脚本。
for FILE in `eval echo{0..$fileIterator}`
{
if(FILE == $fileIterator)
{
printindicator =1;
}
grep RECORD FILEARRAY[FILE]| awk 'for(i=1;i<=NF;i++) {if($i ~ XXXX) {XARRAY[$i]++}} END {if(printIndicator==1){for(element in XARRAY){print element >> FILE B}}'
我希望我对我的代码很清楚。如果您需要任何其他详细信息,请告诉我。
问题
我在这个程序中的动机是遍历所有文件并获取所有文件中具有“XXXX”的行并将这些行存储在一个数组中。这就是我在这里所做的。最后我需要将数组变量的内容存储到一个文件中。我可以在每一步存储内容,如下所示
{if($i ~ XXXX) {XARRAY[$i]++; print XARRAY[$i] >> FILE B}}
但是不采用这种方法的原因是每次我需要执行 I/O 操作,为此花费的时间很多,这就是为什么我每次都将其转换为内存然后最后转储内存数组( XARRAY) 到文件中。
我在这里面临的问题是。shell 脚本每次都调用 awk,数据被存储在数组(XARRAY)中,但对于下一次迭代,XARRAY 的先前内容将被删除,它会放入新内容,因为这假定这是一个新数组。因此,最后当我打印内容时,它只打印最近更新的 XARRAY,而不是预期的所有数据。
预期的建议
1)如何让 awk 脚本意识到 XARRAY 是旧的而不是新的,当它在每次迭代中每次都被调用时。
2) 一种替代方法是每次都进行 I/O。但我对此不感兴趣。除了这个还有其他选择吗。谢谢你。