将四行的块合并为一行

Hen*_*son 2 sed awk

我坚持这一点。

我有一个输入文件,看起来像

16:20:03 Buy
DRIP
AMEX
500 13,51 USD
16:05:10 Sell
SQ
NYSE
100 36,32 USD
15:48:52 Sell
NXTD
Nasdaq
500 4,99 USD
15:48:52 Sell
NXTD
Nasdaq
500 4,99 USD
15:46:07 Buy
SOXL
AMEX
50 147,7209 USD
15:40:20 Buy
TEUM
AMEX
1 700 1,36 USD
15:40:19 Buy
TEUM
AMEX
300 1,36 USD
Run Code Online (Sandbox Code Playgroud)

我的目标是将每个四行记录放到一行中,例如

16:20:03 Buy DRIP AMEX 500 13,51 USD
16:05:10 Sell SQ NYSE 100 36,32 USD
Run Code Online (Sandbox Code Playgroud)

我知道每条记录是四行。我也知道每条记录都以 hh:mm:ss 格式的时间开始(被分隔)

我尝试了各种指定 RS/FS OFS/ORS 的 awk 命令我尝试了不同的 sed 变体,例如

sed 'N;N;s/\n/ /'
Run Code Online (Sandbox Code Playgroud)

awk 只打印第一条记录。sed 无法在同一行上获取所有元素

我可以发布我尝试过的更具体的例子。它看起来真的很简单。谁能给我一个提示?

如果您知道另一种语言的更简单的解决方案,请随时详细说明

Joh*_*024 10

使用粘贴

$ paste -d' ' - - - - <file
16:20:03 Buy DRIP AMEX 500 13,51 USD
16:05:10 Sell SQ NYSE 100 36,32 USD
15:48:52 Sell NXTD Nasdaq 500 4,99 USD
15:48:52 Sell NXTD Nasdaq 500 4,99 USD
15:46:07 Buy SOXL AMEX 50 147,7209 USD
15:40:20 Buy TEUM AMEX 1 700 1,36 USD
15:40:19 Buy TEUM AMEX 300 1,36 USD
Run Code Online (Sandbox Code Playgroud)

使用 sed

$ sed 'N;N;N; s/\n/ /g' file
16:20:03 Buy DRIP AMEX 500 13,51 USD
16:05:10 Sell SQ NYSE 100 36,32 USD
15:48:52 Sell NXTD Nasdaq 500 4,99 USD
15:48:52 Sell NXTD Nasdaq 500 4,99 USD
15:46:07 Buy SOXL AMEX 50 147,7209 USD
15:40:20 Buy TEUM AMEX 1 700 1,36 USD
15:40:19 Buy TEUM AMEX 300 1,36 USD
Run Code Online (Sandbox Code Playgroud)

使用 awk

$ awk '{line=line " " $0} NR%4==0{print substr(line,2); line=""}' file
16:20:03 Buy DRIP AMEX 500 13,51 USD
16:05:10 Sell SQ NYSE 100 36,32 USD
15:48:52 Sell NXTD Nasdaq 500 4,99 USD
15:48:52 Sell NXTD Nasdaq 500 4,99 USD
15:46:07 Buy SOXL AMEX 50 147,7209 USD
15:40:20 Buy TEUM AMEX 1 700 1,36 USD
15:40:19 Buy TEUM AMEX 300 1,36 USD
Run Code Online (Sandbox Code Playgroud)