计算固定长度文件中每行第 12 个位置具有特定字符的行数

Count number of lines in a Fixed length file with a specific character in 12th Position in each line

我有一个固定长度的文件,它是一个有数百万条记录的大文件。每行中记录的长度为 19。在每行中,第 12 个字符对应于一个特定状态,我需要获取文件中每个状态的计数。例如:

XXXXXXXXXXX**1**XXXXXXXXX        
XXXXXXXXXXX**2**XXXXXXXXX      
XXXXXXXXXXX**3**XXXXXXXXX   
XXXXXXXXXXX**4**XXXXXXXXX

我需要计算第 12 个字符中第 12 个字符为 1 的行数、第 2,3 和第 4 行。

我正在使用 java 作为编程语言。

你可以尝试使用 Files class:

Files.lines(path_to_fle).filter(s -> s.charAt(11) == '1').count();

但是如果你为此使用 grep 可能会更有效率?

这比@Anton 提供的要长一些。

public class Test {

    public static void main(String[] args) throws IOException {
        File file = new File("myfile.txt");
        String[] lines = Files.readAllLines(file.toPath()).toArray(new String[0]);
        lines = Arrays.stream(lines).map(l -> l.replaceAll("^.{11}(\d).*$", "")).toArray(String[]::new);

        long n1 = Arrays.stream(lines).filter(s -> s.equals("1")).count();
        long n2 = Arrays.stream(lines).filter(s -> s.equals("2")).count();
        long n3 = Arrays.stream(lines).filter(s -> s.equals("3")).count();
        long n4 = Arrays.stream(lines).filter(s -> s.equals("4")).count();

        System.out.println("n1 = " + n1 + ", n2 = " + n2 + ", n3 = " + n3 + ", n4 = " + n4);
    }

}