我有一个未分类的文件,其中包含多列中的行数据,如下例所示:
10:25:18.814763 [INFO] eceb [ 41] 60 1247 0 38490 163 715
10:25:19.844738 [INFO] eceb [ 41] 60 1248 0 38490 163 715
我想识别所有只考虑第4,5和6列的行,并从文件中删除所有这些行。
因此,结果应该是,在这个例子中:
with open("Test1.txt", "r") as File1:
St = (' '.join(format(ord(x), 'b') for x in File1.read()))
StrList = St.split(" ")
我该怎么做?
答案 0 :(得分:0)
<强>计划强>
- 读取文件并构造一个键映射以计算关键字段的出现次数
- 重新读取文件,仅打印出现次数等于一的记录
<强> filter.awk 强>
#!/usr/bin/awk -f
function get_key(k1, k2, k3, k4) \
{ \
if(k1 == "[") \
{ \
key = k1","k2","k3","k4""; \
} \
else \
{ \
key = k1","k2","k3""; \
} \
return key; \
} \
\
BEGIN \
{ \
} \
(FNR==NR) \
{ \
key = get_key($4, $5, $6, $7); \
a[key] = a[key] + 1; \
} \
(FNR!=NR) \
{ \
key = get_key($4, $5, $6, $7); \
if(a[key] == 1) \
{ \
printf $0"\n"; \
} \
} \
<强>输出强>
$ ./filter.awk input.txt input.txt
10:25:18.814763 [INFO] eceb [ 41] 60 1247 0 38490 163 715
10:25:19.844738 [INFO] eceb [ 41] 60 1248 0 38490 163 715