【发布时间】:2018-08-01 14:37:49
【问题描述】:
我正在解析一个文本文件
Lines File Name Gen LnkLN LINK Time
----- -------------------- ---- ----- ---- ------------------------
00090 TEST1_1519230912 0 00092 .X.X Wed Feb 21 16:35:14 2018
00091 TEST2_1619330534 0 00093 .X.X Wed Feb 21 16:35:14 2018
使用代码
awk '{if (($1 ~ /^[0-9A-Fa-f]+$/) && (length($1)==5)) {
if (! c[$4]) TLN=TLN $4 ","
c[$4]=$4;
if (! d[$3]) TGN=TGN $3 ","
d[$3]=$3
if (! b[$2]) TLNK=TLNK $2 ","
b[$2]=$2
}
} END {print "TLines="TLN,"TGEN="TGN,"TLink="TLNK}' /var/tmp/slink.jnk
我得到 O/p
TLines=00092,00093, TGEN=0,0, TLink=TEST1_1519230912,TEST2_1619330534,
我有两个问题。
第一个是我不明白为什么 TGN 的值在输出“0,0”中被打印两次。如果文件具有字段的重复值,我只希望 o/p 中有一个值。
其次,我将这些 o/p 重定向到另一个文件并使用 #source filename.txt 命令将这些值设置为环境变量,并在脚本的后面部分使用它们。有没有更好的方法将它们用作脚本中的变量,而不是创建另一个文件并获取它。
【问题讨论】:
-
我的输入文件没有正确显示
-
您获得两个
0值的原因是即使您设置了d[0] = 0,(! d[0])仍然为真。请改用if (!($3 in d))。