gpt4 book ai didi

java - ProcessBuilder java Unix 命令

转载 作者:行者123 更新时间:2023-12-01 12:08:22 24 4
gpt4 key购买 nike

我有如下代码

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”结尾的行。

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

    如果您尝试从文件 file1、file2、file3、file4 中获取所有公共(public)行,那么我会使用类似以下内容的内容:

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

    关于java - ProcessBuilder java Unix 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27414163/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com