我想写一个简单的shell脚本,来将我的源文件中的每行进行排序输出,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想写一个简单的shell脚本,来将我的源文件中的每行进行排序输出,相关的知识,希望对你有一定的参考价值。

如下面第一张图,本来是C1、C1、C1、C2、C2、C2排序,我想按照C1、C2来排序,而在达到图2 效果!有哪位大神会吗,现在我只想到sed指令
而且这是一个循环,直到读完文件!

#!/bin/bash
path=/script
for var in C1 C2 C3 C4 C5 C6 C7 C8 H1 H2 H3 H4 H5 H6 H7 H8 H9 N1 O1 O2
do
cat $path/acetaminophen.TXT|grep $var >$path/$var.log
done
#####count一共多少组########
count=`cat $path/C1.log|wc -l`
for((i=1;i<=144;i++))
do
echo "第$i组结果:">>result.log
for var in C1 C2 C3 C4 C5 C6 C7 C8 H1 H2 H3 H4 H5 H6 H7 H8 H9 N1 O1 O2
do
x=$i"p"
cat $path/$var.log|sed -n "$x" >>result.log
done
echo -e "\n">>result.log
done
参考技术A 就是C1这列重复的去掉只留一条???追问

不是,是按照C1、C2、C3、C4、C5、C6、C7、...O1、O2、N1的顺序对源文件进行排序,源文件中的第二行的C与第四行的C2是对应一个分子中的原子。

如何在java中运行shell脚本.sh文件

目的

我写了一个简单的java程序,我想重命名一个文件,然后我想运行我的permission.sh文件。

问题陈述

发生的事情是我的文件名成功更改但是没有执行permission.sh文件。坚持需要帮助!

以下是我的代码。

package nl.ggmd.file.Permission;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;

public class FilePermission extends AbstractMediator
{

  public boolean mediate(MessageContext context) { 
      try {
      File oldfile =new File("/ggmd/files/uploads/FIle contract1.csv");
        File newfile =new File("/ggmd/files/uploads/contract1.csv");

        if(oldfile.renameTo(newfile)){
            System.out.println("Rename succesful");
        }else{
            System.out.println("Rename failed");
        }


          Process proc = Runtime.getRuntime().exec("/opt/file/contracts/tst/permissions.sh"); 
          BufferedReader read = new BufferedReader(new InputStreamReader(
                  proc.getInputStream()));
          try {
              proc.waitFor();
          } catch (InterruptedException e) {
              System.out.println(e.getMessage());
          }
          while (read.ready()) {
              System.out.println(read.readLine());
          }
      } catch (IOException e) {
          System.out.println(e.getMessage());
      }


    return true;
  }
}

编辑

这个java代码是WSO2 ESB的自定义类中介,而wso2没有显示java mediator的日志,因此我无法调试该问题。

以下是我的permission.sh代码。

#!/bin/bash
cd /ggmd/files/uploads/
file=contract1.csv

if [ ! -a $file ]
then
  sudo chmod 664 $file && echo "The file is now writable"
else
  echo "The file is already writable"
fi
答案

建议使用Process Builder。它真的是为这种任务而构建的。

您的程序permisions.sh不是Java可以理解的,即使操作系统将其理解为可执行文件。

您需要通知Java执行命令需要bash shell(或其他一些shell)。例如。 / bin / bash是可以运行或执行脚本的程序的路径。有了这个说你跟着这个代码片段来解决这个问题。

public class FilePermission extends AbstractMediator
{

  public boolean mediate(MessageContext context) { 
      try {
      File oldfile =new File("/ggmd/files/uploads/FIle contract1.csv");
        File newfile =new File("/ggmd/files/uploads/contract1.csv");

        if(oldfile.renameTo(newfile)){
            System.out.println("Rename succesful");
        }else{
            System.out.println("Rename failed");
        }

private final String commandPath = "/bin/bash";

private final String scriptPath = "/opt/file/contracts/tst/permissions.sh";


try {
        Process execCommand = new ProcessBuilder(commandPath, scriptPath).start();
        execCommand.waitFor();
    } catch (IOException e) {
        // handle exceptions
        System.out.println(e.getMessage());
    } catch (InterruptedException e) {
        System.out.println(e.getMessage());
    }


    return true;
  }
}

请注意,上述代码可能需要进行一些修改,尤其是当您的脚本(permissions.sh)可能依赖于当前工作目录时。上面正在使用java代码的工作目录。

但可以通过在进程对象上调用directory(File directory)方法来更改。然后将新的工作目录路径传递给它。在这种情况下

Process execCommand = new ProcessBuilder(commandPath, scriptPath).directory(new File("/some/directory/to/be/used/")).start();

您也可以在需要时拨打execCommand.getErrorStream();execCommand.getInputStream();

以上是关于我想写一个简单的shell脚本,来将我的源文件中的每行进行排序输出,的主要内容,如果未能解决你的问题,请参考以下文章

使用shell脚本检查“diff”命令的输出

我在将我的 bash 命令转换为 shell 脚本中的 shell 脚本语法错误时遇到错误

如何在shell脚本中修改添加替换指定文件中的内容

如何在Linux中执行Shell脚本?

前端自动化 shell 脚本命令 与 shell-node 脚本命令 简单使用 之 es6 转译

用于部署 git 文件夹的外部 shell