从日志文件中删除用户特定信息

时间:2020-04-18 09:27:22

标签: unix awk sed grep

我必须从所有日志文件中删除特定于用户的信息,即用户名,电子邮件和电话号码。

但是,对于每个日志文件,这些信息可以位于不同的列中。此外,日志文件没有任何特定格式。

例如,日志文件如下:

CustomerID City     Cname   CPhone   Cemailid
1234       SEA  George 4468689901 goerge@xyz.com
2234       NYK  Jose   7712393223 jose@abc.com

另一个是这样的:

Customername CustID email         Phone     city
Philip       3345  phil@qqq.com 2233442233 VEG
Tom          2267  tom@kkk.com  8877343434 DAL

有什么想法可以找到一种方法吗?

1 个答案:

答案 0 :(得分:0)

如果您事先不知道日志文件的标题如何,那么您几乎无能为力 标题和使用标题。

结果,在不知道如何利用标题行的情况下,您无法区分PhilipSeattle的居住者和Seattle居住在Philip的{​​先生}先生您可以做的是设计一些方法来识别某些字段。

例如,它通过匹配@和电话来识别电子邮件 通过匹配多于4位数字,然后删除除标题行之外的所有行中的这些列。

awk '
NR == 1 { print; next }
NR == 2 {
  for (i = 1; i <= NF; ++i) {
    if (match($i,/@/)) { email = i }
    if (match($i,/^[0-9]{5,}$/)) { phone = i }
  }
}
{
  $email = ""
  $phone = ""
  print $0
}'

但是,如果您知道,并且知道用户特定列的标题始终与某些正则表达式匹配,则可以执行以下操作:

awk '
NR == 1 {
  for (i = 1; i <= NF; ++i) {
    if (match(tolower($i),/name/)) { name = i }
    if (match(tolower($i),/phone/)) { phone = i }
    if (match(tolower($i),/mail/)) { mail = i }
  }
}
{
  $name = ""
  $mail = ""
  $phone = ""
  print $0
}'