如何解析&使用UNIX脚本更新平面文件

时间:2011-10-17 11:08:45

标签: file shell unix flat

我正在尝试解析一个包含标题列的平面文件 NAME COMPANY DETAILS STATUS etc(数据之间的数据不同)。

当我使用该文件作为输入运行脚本时,我需要更新STATUS列,并根据其他列的详细信息更新STATUS。

sed& vi不能用,显而易见。请帮忙。

我要解析的文件的摘录是: 我试图解析的文件摘录,问题是:

34 / * 1 2 3 4 5 6
35 / * 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
36 YYNNN LOCAL1 TRANSFER-CDM(仅限)=> local.transfer LOCAL
37 YYNNN LOCAL2 EXCHANGE-CATIA => IGES / DXF / STEP LOCAL
38 YYNNN ACIS1 C AutoWeb媒体服务CCX
39 YYNNN ACNC1 C Auto / Con Corporation CCX
40 YYNNN ACST1 C Accurcast Inc CCX
41 YYNNN AAGD1 C Algonquin Automotive CCX


现在我需要做的是解析这个平面文件,第6列将被添加为STATUS。

我试过了:

awk'/ 23861 / {$ 0 = $ 0“|已处理”} {打印}'输入

其中 - 1.awk命令wil srch 4模式
        2.大括号中的内容将在最后一栏中更新

但这也给了我错误:  如果它与行中的字符串匹配,则在末尾添加“| Processed”字符串 如果我再次运行该命令,它会在最后添加该字符串 那一行看起来像 JAN FEB MAR |已处理|已处理

现在,我想要的是用新的值替换之前的“| Processed”值(根据条件)并相应地更新该值

2 个答案:

答案 0 :(得分:1)

你应该定义

  

取决于其他栏目的详细信息。

有什么细节?

e.g。如果DETAILS列值== 1然后执行更新,您可以执行以下操作:

awk '$3==1{$4="NEW STATUS"}1' yourFlatFile

如果要查看,如果公司名称包含“google”,则执行更新:

awk '$1~/google/{$4="NEW Status"}1' flatFile

您必须定义其他列的详细信息

答案 1 :(得分:0)

您可以使用awk:

cat flatfile | awk '{ $4 = "New Status"; print }'