用java实现"awk -d"功能(保留多行重复)

一般用过linux脚本的都知道"awk -d"的用法: 只显示有重复数据行,每种重复行只显示其中一行.

而我的需求是希望显示所有的重复行, 而不是只是一行. 因为目前对shell脚本不是很熟练, 下面是java代码的实现,感觉比想象的复杂, 备忘一下:

public class ReadCardCode {
public static void main(String[] args) throws Exception {
BufferedReader reader =
new BufferedReader(new FileReader("sort.log"));
BufferedWriter writer1 =
new BufferedWriter(new FileWriter("result.log"));
BufferedWriter writer2 =
new BufferedWriter(new FileWriter("result-2.log"));
int count = 6;
int i = 0;
String current = null;
String curItemId = null;
// 将同一商品的所有记录取出放到一边, 如果这些记录大于1则说明有重复, 输出. 否则抛弃
List<String> lineList = new ArrayList<String>(10);
try {
while ((current = reader.readLine()) != null) {
String[] curArray = current.split(" ");
if (curItemId == null) { // 首行
lineList.add(current);
} else { // 下一行
if (curArray[2].equals(curItemId)) { // 相同行加入列表
lineList.add(current);
} else {
writeLineList(writer1, writer2, lineList);
// 下一轮首行
lineList.clear();
lineList.add(current);
}
}

curItemId = curArray[2];

// if (i++ > 6) {
// break;
// }
}
writeLineList(writer1, writer2, lineList);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
writer2.close();
writer1.close();
} catch (Exception ee) {
ee.printStackTrace();
}
}
}

private static void writeLineList(BufferedWriter writer, BufferedWriter writer2, List<String> lineList)
throws IOException {
if (lineList.size() > 1) { // 输出前面相同行
for (String line : lineList) {
write(writer, writer2, line);
}
}
}

private static void write(BufferedWriter writer, BufferedWriter writer2, String str) throws IOException {
BufferedWriter w = writer;
// String[] curArray = str.split(" ");
// String itemId = curArray[2].replace("itemId=", "");
// long route = Long.valueOf(itemId) % 2;
// if (route == 1) {
// w = writer;
// } else {
// w = writer2;
// }
w.write(str);
w.newLine();
w.flush();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值