我陷入了看起来对 SED 来说应该很简单的事情。
我有一些(某种)CSV 文件是从另一个应用程序中获取的,因此我无法控制它的输出。SED 已经完成了一些预处理,但我坚持最后一个。因此,如果可能的话,我希望使用 SED 来避免使用第三个应用程序。
问题是文件的标题行(第一行)沿文件重复,但不幸的是具有以下特征:
- 每个 CSV 文件的标题以前是未知的。每个文件都有自己的标题,可能彼此不同;
- 并非总是在每 N 行上发生重复(N 是一个固定的已知数)
- 其他数据(非标题)行可能会重复,应保留
所以,假设我有以下 2 个文件:
现金.csv
Name; Amount
John; 3.55
Erick; 4.76
John; 8.99
Name; Amount
Erick; 4.76
Mark; 1.00
Name; Amount
John; 3.55
检查.csv
Name; Account; Amount
Erick; 345344; 123.00
Mark; 88849; 323.50
Name; Account; Amount
John; 474473; 99.00
Mark; 88849; 323.50
Mark; 88849; 323.50
John; 474473; 99.00
我希望将单个 SED 脚本应用于每个文件,将它们变成:
Cash.processed.csv
Name; Amount
John; 3.55
Erick; 4.76
John; 8.99
Erick; 4.76
Mark; 1.00
John; 3.55
检查.processed.csv
Name; Account; Amount
Erick; 345344; 123.00
Mark; 88849; 323.50
John; 474473; 99.00
Mark; 88849; 323.50
Mark; 88849; 323.50
John; 474473; 99.00
我想知道是否可以在删除命令中使用 SED“保持缓冲区”作为模式:
1h #Hold the first line (headings)
/\h/d #Use hold buffer as a pattern to delete
假设“\h”会将保持缓冲区返回给删除命令。
感谢您的任何回复;
PS:请不要用以下过于具体的命令回答:
1p;/Name; Amount\|Name; Account; Amout/d