首页 > 解决方案 > 如何使用 bash 从 log_file.txt 中提取数据

问题描述

我有一个master_log_file.txt,顺序如下:

TransferDate|DeptID|FolderID             |DocID |AFPFileName|NoOfAcct| 
20181024    |1     |LRREM1.20181015.CGLOG|test  |xxxx       |12
20181024    |2     |LRREM2.20181013.CGLOG|home  |XyyX       |2
20181024    |3     |LRREM3.20181013.CGLOG|office|xy         |5
20181024    |4     |LRREM4.20181013.CGLOG|store |yy         |10

我想创建一个 bash 文件,根据 FolderID 和 DeptID 将所有日志数据分离到单独的日志文件中。有人可以给我一个关于如何做到这一点的例子,因为我是这批东西的新手。提前致谢。以下是根据 mjuarez 建议的我的 bash 文件。

echo off
for folder in `grep -v TransferDate log_test.txt | cut -d "|" -f3 | sort | uniq`; do 
   grep ${folder} separated.txt > F:/Work/FLP Code/test/folder_${folder}.txt; 
done
pause

我错过了什么吗?

标签: bash

解决方案


首先,请参阅此链接以显示您已尝试过的内容,并且通常值得花时间让其他人觉得您已尽职尽责。

第二:这种格式是否一致?它显然是格式化的,所以我假设它是。

cut -c 14-41 logFile | grep -v DeptID | sort -u |
  while read key
  do IFS="$IFS|" read dept folder <<< "$key";
     grep "$key" < logFile > $folder.$dept;
  done

14-41 是你提到的键的范围,我用cut.

grep -v用它们剥离标题sort -u以获得定义每个输出文件的一组唯一组合。通过管道将其传输到 while 读取循环。

为 $IFS 的临时分配添加管道字符,以将部门和文件夹分配给我用来为您的输出创建不同文件名的变量,然后grep将每个组合的键分配给相关文件。

这能满足你的需要吗?

我看到有人打败了我,但我不认为文件夹值总是一致的,因为你单独提到了部门。


推荐阅读