我必须从所有日志文件中删除特定于用户的信息,即用户名,电子邮件和电话号码。
但是,对于每个日志文件,这些信息可以位于不同的列中。此外,日志文件没有任何特定格式。
例如,日志文件如下:
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
有什么想法可以找到一种方法吗?
答案 0 :(得分:0)
如果您事先不知道日志文件的标题如何,那么您几乎无能为力 标题和使用标题。
结果,在不知道如何利用标题行的情况下,您无法区分Philip
是Seattle
的居住者和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
}'