我有一个名为file1.txt的文本文件,其格式如下:
001 , ID , 20000
002 , Name , Brandon
003 , Phone_Number , 616-234-1999
004 , SSNumber , 234-23-234
005 , Model , Toyota
007 , Engine ,V8
008 , GPS , OFF
我的file2.txt格式如下:
#==============================================
# 005 : Model
#------------------------------------------------------------------------------
[Model] = Honda
option = 0
length = 232
time = 1000
hp = 75.0
k1 = 0.3
k2 = 0.0
k1 = 0.3
k2 = 0.0
#------------------------------------------------------------------------------
[Model] = Toyota
option = 1
length = 223
time = 5000
speed = 50
CCNA = 1
#--------------------------------------------------------------------------
[Model] = Miata
option = 2
CCNA = 1
#==============================================
# 007 : Engine
#------------------------------------------------------------------------------
[Engine_Type] = V8 #1200HP
option = 0
p = 12.0
pp = 12.0
map = 0.4914
k1mat = 100
k2mat = 600
value =12.00
mep = 79.0
cylinders = 8
#------------------------------------------------------------------------------
[Engine_Type] = v6 #800HP
option = 1
active = 1
cylinders = 6
lim = 500
lim = 340
rpm = 330
start = 350
ul = 190.0
ll = 180.0
ul = 185.0
#==============================================
# 008 : GPS
#------------------------------------------------------------------------------
[GPS] = ON
monitor = 0
#------------------------------------------------------------------------------
[GPS] = OFF
monitor = 1
Enable = 1
#------------------------------------------------------------------------------
[GPS] = Only
monitor = 2
Enable = 1
#==============================================
# 014 :Option
#------------------------------------------------------------------------------
[Option] = Disable
monitor = 0
#------------------------------------------------------------------------------
[Option] = Enable
monitor = 1
#==============================================
# 015 : Weight
#------------------------------------------------------------------------------
[lbs] = &1
weight = &1
#==============================================
预期输出应该如下所示: 由于file1.txt中只有选项005-008,因此输出为:
Code:
#==============================================
# 005 : Model
#------------------------------------------------------------------------------
[Model] = Toyota
option = 1
length = 223
time = 5000
speed = 50
CCNA = 1
#==============================================
# 007 : Engine
#------------------------------------------------------------------------------
[Engine_Type] = V8 #1200HP
option = 0
p = 12.0
pp = 12.0
map = 0.4914
k1mat = 100
k2mat = 600
value =12.00
mep = 79.0
cylinders = 8
#==============================================
# 008 : GPS
#------------------------------------------------------------------------------
[GPS] = OFF
monitor = 1
Enable = 1
#-----------------------------------------------------------------
现在,使用awk和file1中第2和第3列的值,我想在file2中搜索这些字符串,并将该部分中的所有内容输出到CSV文件,即从找到字符串的位置到有文件的位置#------------- 划界。
有人可以帮我解释一下并解释一下吗?我是Awk的新手
谢谢!
答案 0 :(得分:0)
我不会按照规定使用awk来完成这项工作,但这里有一小段内容可以开始:
awk -F'[ ,]+' 'FNR == NR { section["[" $2 "]"] = $3; next }
/^\[/ && section[$1] == $3, /^#/' file1.txt file2.txt
1)-F'[ ,]+'
将字段分隔符设置为空格和/或逗号中的一个或多个(因为file1.txt
看起来不是正确的CSV文件)。
2)FNR == NR
(文件中的记录数等于总记录数)仅在读取file1.txt
时才为真。因此,对于file1.txt
中的每一行,我们将[second_field]
记录为要查找的模式,并将第三个字段作为值。
3)然后我们查找以[
开头的行,其中section
中存储的该行的第一个字段的值与该行的第三个字段匹配(/^\[/ && section[$1] == $3
),并从该行打印,直到以#
开头的下一行。
示例输入的输出为:
[Model] = Toyota
option = 1
length = 223
time = 5000
speed = 50
CCNA = 1
#--------------------------------------------------------------------------
[GPS] = OFF
monitor = 1
Enable = 1
#------------------------------------------------------------------------------
第3步中的匹配行为[Model] = Toyota
和[GPS] = OFF
。缺少Engine
行,因为file2.txt
代替Engine_Type
。另外,我没有打扰部分标题;添加另一个条件来打印它们很容易,但它需要先行才能打印出那些内容匹配的内容(因为当你读到标题时你不知道是否在里面找到匹配)。为此,我会切换到另一种语言(例如Ruby)。