的ProcessBuilder java的UNIX命令

问题描述:

我有代码象下面的ProcessBuilder java的UNIX命令

ProcessBuilder pb = new ProcessBuilder("bash", "-c", 
     " awk -f awkfile " + " file2 " + file1); 

p = pb.start(); 
p.waitFor(); 
p.destroy(); 

pb = new ProcessBuilder("bash", "-c", 
     " awk -f awkfile " + " file3 " + outFile); 
p = pb.start(); 
p.waitFor(); 
p.destroy(); 

pb = new ProcessBuilder("bash", "-c", 
     " awk -f awkfile " + " file4 " + outFile); 
p = pb.start(); 
p.waitFor(); 

p.destroy(); 

awkfile具有内容

FILENAME==ARGV[1] {vals[$1FS$2FS$3] = ",Y"; next} 
     !($1FS$2FS$3 in vals) {vals[$1FS$2FS$3] = ",N"} 
     {$(NF+1) = vals[$1FS$2FS$3]; print > "outFile"} 

第一运行的ProcessBuilder罚款。不过outFile具有完整输出(I注释剩余代码和测试)。当我包含第二个ProcessBuilder或第三个ProcessBuilder时,outFile不完整。 这是空间问题还是内存问题。 我不知道如何找到分配给我的主目录的总空间。 du命令结果如下

du -s /home/xxxxx 
    19172 /home/xxxxx 

df命令结果如下

df -k /home/xxxxx 
    Filesystem    1K-blocks Used Available Use% Mounted on 
    /dev/mapper/rootvg-homelv 2064208 193068 1766296 10% /home 

是可用上述1766296整个/ home目录或者只是为了我的家目录/ home/XXXXX

请你指导我如何解决这个问题。

+0

它是如何awkfile忽略'​​ARGV [0]'?另外,我建议参数化中间输出文件名(即'ARGV [2]'),而不是在awk文件中对outFile进行硬编码。 – gknicker 2014-12-11 03:36:06

除非启用配额,否则您可以达到文件系统上可用的最大值。

du -s报告整个目录的磁盘使用情况。我更喜欢“du-sh/home/xxxx”,它应该以MB,Kbytes等格式报告它,

df -k(我更喜欢df -h)表示整个磁盘有多少可用空间(或卷)上存在文件系统。请注意,这可能包括所有用户的主目录。

如果配额已启用,则可以使用quota -v查看每个文件系统上的配额。

看起来你正在试图做的是:

  1. 采取3场从第一个文件

  2. 打印出第二个文件的行用“Y”是否结束它(第二个文件中的3个字段)也在第一个文件中找到。

  1. 打印出从第二文件具有“ N”结束行,如果它(在第二文件中的3个字段)不存在在第一个文件中。
  2. 我不知道你是否使用与你的输入文件相同的名称作为输出文件。你不会说你的PB中outFile变量的值是多少。如果您正在尝试从同一个文件读取和写入,那么输出结果确实是不确定的。

    如果您想从文件文件1,文件2,文件3,文件4所有的共用线,那么我会使用这样的:

    ProcessBuilder pb = new ProcessBuilder("bash", "-c", 
        " awk -f awkfile " + " file2 " + file1); 
    
    p = pb.start(); 
    p.waitFor(); 
    p.destroy(); 
    
    // rename the outFile to something different. eg. outfile2. 
    File of= new File("outFile"); 
    File of2= new File("outFile2"); 
    of.renameTo(of2); 
    
    pb = new ProcessBuilder("bash", "-c", 
        " awk -f awkfile " + " file3 " + "outFile2"); 
    p = pb.start(); 
    p.waitFor(); 
    p.destroy(); 
    
    // rename the outFile to something different. eg. outfile2. again. 
    of= new File("outFile"); 
    of2= new File("outFile2"); 
    of.renameTo(of2); 
    
    pb = new ProcessBuilder("bash", "-c", 
        " awk -f awkfile " + " file4 " + "outFile2"); 
    p = pb.start(); 
    p.waitFor(); 
    p.destroy(); 
    
开始=“3”>