计算固定长度文件中每行第 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);
}
}
我有一个固定长度的文件,它是一个有数百万条记录的大文件。每行中记录的长度为 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);
}
}