我正在使用openvms,但可以在此平台上访问aWk和/或sed的版本。想知道是否有人可以帮助处理文本文件。
我的文件看起来像
START-OF-DATA
Stock ID|XYZ
START-TIME 11:30
END_TIME 12:30
11:31|BID|12.5|ASK|12.7
11:34|BID|12.6|ASK|12.7
END-OF-DATA
START-OF-DATA
Stock ID|ABC
START-TIME 11:30
END_TIME 12:30
11:40|BID|.245|ASK|.248
11:34|BID|.246|ASK|.249
END-OF-DATA
基本上我想将BID/ASK
数据记录与Stock ID
预先挂起,以便上面的文件看起来像
START-OF-DATA
Stock ID|XYZ
START-TIME 11:30
END_TIME 12:30
XYZ|11:31|BID|12.5|ASK|12.7
XYZ|11:34|BID|12.6|ASK|12.7
END-OF-DATA
START-OF-DATA
Stock ID|ABC
START-TIME 11:30
END_TIME 12:30
ABC|11:40|BID|.245|ASK|.248
ABC|11:34|BID|.246|ASK|.249
END-OF-DATA
任何人都可以帮忙吗?
答案 0 :(得分:2)
像这样:
awk -F'|' 'BEGIN{OFS="|"} /^Stock/{S=$2} /BID|ASK/{print S,$0}' file
解释(感谢Olivier Dulac)
每次遇到以“Stock”表示的行时,它都会更新“S”变量,然后将S前置为包含“BID”或“ASK”的行(使用|作为读取和输出的分隔符)。
答案 1 :(得分:0)
试试这个:
awk -F'|' 'NF==2{pre=$2}NF>2{$0=pre FS $0}7' file
它适用于给定的示例。
答案 2 :(得分:0)
使用awk
awk '/Stock ID/{s=$2}/BID|ASK/{$0=s FS $0}1' FS=\| file
START-OF-DATA
Stock ID|XYZ
START-TIME 11:30
END_TIME 12:30
XYZ|11:31|BID|12.5|ASK|12.7
XYZ|11:34|BID|12.6|ASK|12.7
END-OF-DATA
START-OF-DATA
Stock ID|ABC
START-TIME 11:30
END_TIME 12:30
ABC|11:40|BID|.245|ASK|.248
ABC|11:34|BID|.246|ASK|.249
END-OF-DATA
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -r '/Stock ID/h;/BID|ASK/{G;s/(.*)\n.*\|(.*)/\2|\1/}' file
将Stock ID
保存在保留空间中,并将其添加到包含BID
或ASK
的记录中。