java 实现 一些 Linux 命令的 功能,比如:cat server.log | grep nandao | sort | uniq -c | sort -rn
一,功能简介:在server.log 文件中 筛选出 nandao 字符串 从小到大排序,然后算出每个字符串的个数,并输出;这是linux环境常用的命令,现在改成java代码实现。
二、测试代码实现
/**
* @author wanghuainan
* @date 2021/3/4 15:15
*/
@Slf4j
public class ShellToJava {
/**
* cat server.log | grep nandao | sort | uniq -c | sort -rn
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//cat server.log 命令,在java中相当于是读取文件中的所有行,并输出
String filePath = "E:\\四维日常工作\\power_ser项目\\RDBMS_fa1265fb9f0041cb815273c1d53cca70_cable.json";
File file = new File(filePath);
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
List<String> lineList = new ArrayList<>();
String str = null;
while ((str = bufferedReader.readLine()) !=null){
lineList.add(str);
}
log.info("执行完cat命令输出{}:",lineList);
//grep nandao 相当于每行依次搜索nandao
lineList = lineList.stream().filter(line ->line.contains("nandao")).collect(Collectors.toList());
log.info("筛选后:{}",lineList);
//sort 命名是按照字典从小到大排序:
lineList = lineList.stream().sorted().collect(Collectors.toList());
log.info("排序后{}:",lineList);
//uniq -c 统计相同元素的个数:
Map<String,Long> map = lineList.stream().sorted().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
//sort -rn,排序后逆序输出
List<Long> res = map.values().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
res.forEach( System.out::println);
}
}
三,功能已实现,此代码采用java8流式编程思想,代码是比较简洁的,效率也比较高,可以测试比较一下。