使用 Bash 脚本和 Awk 将动态 TSV/CSV 文件拆分为 3 个单独的文件

igb*_*s09 2 csv bash awk

我有一个动态 csv/tsv 文件(制表符分隔符),其中每小时在借记计数分数计数下方添加一个新行。Receipt Count下不会添加新行,只有值每小时发生变化。请看下面两个例子以供参考。

第 3 小时的 FileA.csv 示例

Debit Count     VALUE
hour 1          5
hour 2          81
hour 3          15
Score Count
hour 1          31
hour 2          66
hour 3          9
Receipt Count
age logs        23
bus logs        21
pig logs        7
dog logs        40
Run Code Online (Sandbox Code Playgroud)

第 7 小时的 FileA.csv 示例

Debit Count     VALUE
hour 1          5
hour 2          81
hour 3          15
hour 4          20
hour 5          52
hour 6          33
hour 7          35
Score Count    
hour 1          31
hour 2          66
hour 3          9
hour 4          112
hour 5          15
hour 6          38
hour 7          21
Receipt Count  
age logs        13
bus logs        28
pig logs        85
dog logs        55
Run Code Online (Sandbox Code Playgroud)

因此,我想要实现的是将 FileA.csv 分离为 ABC.csv 、 DEF.csv 和 GHI.csv ,请记住借记计数分数计数下方的行每小时都会增加。新文件 ABC.csv、DEF.csv、GHI.csv 将每小时替换一次

使用第三个小时的例子来参考我想要实现的目标

ABC.csv

Debit Count     VALUE
hour 1          5
hour 2          81
hour 3          15
Run Code Online (Sandbox Code Playgroud)

DEF.csv

Score Count  
hour 1          31
hour 2          66
hour 3          9
Run Code Online (Sandbox Code Playgroud)

GHI.csv

Receipt Count
age logs        23
bus logs        21
pig logs        7
dog logs        40
Run Code Online (Sandbox Code Playgroud)

我尝试做什么(已编辑)

awk f="ABC.csv DEF.csv GHI.csv" '
  BEGIN {split(f,files)} /^Debit/ /^Score/ /^Receipt/ {n++} {print>files[n]}' FileA.csv
Run Code Online (Sandbox Code Playgroud)

由于上一篇文章缺乏重点,该问题已关闭,我可以选择编辑或重新发布该问题。我决定以更清晰的方式重新发布该问题,以便以前可能看过该问题的其他人可以再次看到该问题。谢谢