ProcessBuilder java Unix命令

时间:2014-12-11 02:00:03

标签: 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有完整的输出(我注释掉了剩下的代码并进行了测试)。当我包含第二个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

对于整个/ home目录是否可用以上1766296或仅用于我的主目录/ home / xxxxx

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

1 个答案:

答案 0 :(得分:1)

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

du -s报告整个目录的磁盘使用情况。我更喜欢" du -sh / home / xxxx"应以Mbytes,Kbytes等报告,

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

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

看起来你要做的是:

  1. 从第一个文件中取出3个字段

  2. 使用",Y"打印第二个文件中的行。如果它(第二个文件中的3个字段)也在第一个文件中找到则结束。

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

      如果你想从文件file1,file2,file3,file4获取所有公共行,那么我会使用类似的东西:

      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();