繁体   English   中英

ProcessBuilder Java Unix命令

[英]ProcessBuilder java Unix Commands

我有下面的代码

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或第三个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

您能指导我如何解决这个问题吗?

除非启用了配额,否则您最多可以使用文件系统上的可用配额。

du -s报告整个目录的磁盘使用情况。 我更喜欢“ du -sh / home / xxxx”,它应该以兆字节,千字节等为单位进行报告,

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

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

看来您要执行的操作是:

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

  2. 如果在第一个文件中也找到了第二个文件中的3个字段,则从第二个文件中打印出以“,Y”结尾的行。

要么

  1. 如果第二个文件中的3个字段不存在,则从第二个文件中打印出以“,N”结尾的行。

我想知道您是否在输出文件中使用与输入文件相同的名称。 您没有说出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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM