比较.txt和.csv文件,并用引用名称替换出现的情况

时间:2017-02-07 17:29:08

标签: bash csv awk

FILE1.TXT

$

file2.csv

[fields:WinSpc:defect]
a=b
hello=hi

[fields:ROCKET PROJECT:ticket]
description=Descrtiption
status=status

[fields:abl_tja1146:autoticket]
description=description
status=status

[fields:abl_tja1146:risk]
description=description
assignedToUsername=assigned_to

所需的输出如下:

output.txt或原始txt文件可以附加(file1.txt)

WinSpc,projects.winspc
ROCKET PROJECT,projects.rocket_project
TJA1146,projects.abl_tja1146

因为其中一个字符串(abl_tja1146)是完美的,不需要匹配它们,应该被忽略。

这是来自早期问题的extension,但要处理应忽略字段的情况。

1 个答案:

答案 0 :(得分:1)

以下Awk逻辑将为您完成工作。

awk 'FNR==NR{split($2,list,"."); replacement[$1]=list[2]; next} \
   $0 ~ /^\[/{split($0,newlist,":"); if(newlist[2] !~ /^[[:lower:]]/) \
      {gsub(newlist[2],replacement[newlist[2]],$0); print; \
          while(getline && $0 != ""){print} print ""} }' FS="," file2.txt file1.txt

根据需要生成输出。

[fields:winspc:defect]
a=b
hello=hi

[fields:rocket_project:ticket]
description=Descrtiption
status=status

要替换的值的哈希映射和实际值是从file2创建的,然后在file1上,regex匹配是在以{{1}开头的行上执行的并检查第二个字段是否为完美字符串(在您的示例中为小写),如果这样,后续行将被丢弃,否则它们将在显示时打印。