我被困在看起来应该对SED来说很简单的东西中。SED - 通过文件的其余部分删除第一行的出现
我有一些(类)的CSV文件,我从另一个应用程序中获得,所以我无法控制它的输出。一些预处理已经完成了SED,但是我被困在最后一个。因此,如果可能的话,我希望用SED来做,以避免使用第三个应用程序。
的问题是,该文件(第一行)的标题线沿文件重复,但遗憾的是具有以下特征:
- 每个CSV文件的标题是未知的先前。每个文件都有自己的标题,可能彼此不同;发生在每N行(为N固定的已知数量)
- 其他数据(非标题)线可能被重复
- 不总是重复,并应保持
因此,假设我有以下2档:
Cash.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
Check.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
Check.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
乔纳森,谢谢你的提示。没有足够的声望,但只要我得到它,我会标记为有用。我很长一段时间只读堆栈溢出风扇。我没想到会得到有用的答案,所以现在我是一个很大的SO粉丝。谢谢你们! – RFVoltolini