【发布时间】:2016-12-23 06:10:54
【问题描述】:
令 a 为文本文件,b 为 unl 文件。
在a中,我得到了由空格/制表符分隔的数据,最后一列有空格。
IE:
30714931330 1.0000 201608 10 X 10 S.A.
30594465497 E 0.0044 201608 1 SOYORRO S.A.
这里,“10 X 10 S.A.”和“1 SOYORRO S.A.”是最后一个列。
我需要做的是:
在每一行中从 a 到 b 输出一些字段,其方式取决于“E”(第二列)是否存在,以及每个字段应该用分号“;”隔开包括最后一个。
输出格式为:
20160727;30714931330; ;1.0000;201608;
20160727;30594465497;E;0.0044;201608;
第一个字段是YYYYMMDD格式的发行日期(不在a文件中)。我怎么能得到它并把它放在这里?
我做了一些事情,结果我得到了:
awk '{if($2 == "E") {print $issueDate ";" $1 ";" "E;" $3 ";" $4 ";" > "b.unl"} else {print $issueDate ";" $1 ";" " ;" $2 ";" $3 ";" > "b.unl"}}' a.txt
或者
awk '{if($2 == "E") {print $issueDate ";" $1 ";" "E;" $3 ";" $4 ";"} else {print $issueDate ";" $1 ";" " ;" $2 ";" $3 ";"}' a > b
这是实现它的正确方法吗? 否则,我该怎么做?使用 sed 会有帮助吗?
谢谢。
【问题讨论】:
-
(a) 有不止一种类型的
UNL文件。你用的是哪一个? (b) “第一个字段是发行日期......我不知道如何获取它。”您可能需要提供更多关于该日期的信息。 -
wrt
separated data by spaces/tabs- 制表符和空格是随机散布在您的文件中,还是它们都出现在文件中的特定位置?请编辑您的问题以在示例输入中显示制表符 (<tab>) 和空格 (<blank>) 出现的位置,因为这对正确的解决方案有很大影响。