file - 基于某些特定字符串的出现在 Unix 中拆分文件
问题描述
我的文件内容如下
Tenor|CurrentCoupon
15Y|3.091731898890382
30Y|3.5773546584901617
Id|Cusip|Ticker|Status|Error|AsOfDate|Price|LiborOas
1|01F020430|FN 15 2 F0|1||20180312|95.19140625|-0.551161358515
2|01F020448|FN 15 2 F1|1||20180312|95.06640625|1.18958768351
3|01F020547|FN 20 2 F0|1||20180312|90.484375|50.742896921
4|01F020554|FN 20 2 F1|1||20180312|90.359375|52.4642397071
5|01F020646|FN 30 2 F0|1||20180312|90.25|6.26649840403
我必须把它分成2个文件,比如
Tenor,CurrentCoupon
15Y,3.294202313
30Y,3.727696014
和
Id,Cusip,Ticker,Status,Error,AsOfDate,Price,LiborOas
1,01F020489,FN 15 2 F0,1,,20180807,94.27734375,6.199343069
2,01F020497,FN 15 2 F1,1,,20180807,94.15234375,8.225144379
3,01F020588,FN 20 2 F0,1,,20180807,89.984375,48.11248894
我对 UNIX 脚本知之甚少。行数会有所不同。
解决方案
使用 awk 你可以做一些非常简单的事情
awk -F '|' '{print $0 > NF ".txt"}' yourfile.txt
此命令会将您的文件拆分为 2.txt(所有行包含 2 列)和 8.txt(所有行包含 8 列)
要理解这个命令,-F 选项设置分隔符,awk 会逐行解析你的文件,$0 代表整行,NF 代表解析行的字段数。
如果要更改分隔符 | 至 , :
awk -F '|' 'BEGIN{OFS=","};{$1=$1; print > NF ".txt"}' yourfile.txt
OFS 代表输出文件分隔符,$1=$1 是一个丑陋的黑客,用正确的分隔符重建你的行^^
推荐阅读
- terraform - 配置 VM 失败。Linux/Windows 资源块合并
- c# - C# - CSOM - 将文件上传到 Sharepoint Online 中的子目录
- r - Shiny应用程序中数据库查询/进度条的取消按钮?
- python - 如何使用 matplotlib 将灰度图像转换为亮度图像?
- angular - HighCharts 角度不适用于来自 Angular 服务的动态数据
- angular - 如何在 Angular 的选择下拉菜单中启用搜索选项?
- python - Tensorflow InvalidArgumentError:发现 2 个根错误。索引[28,0] = 11292 不在 [0, 11272)
- javascript - 在添加新行时生成序列号并在删除任何行时调整序列号
- azure-ad-b2c - 将用户流分配给应用程序
- asp.net - 我的 ASP.NET MVC 应用程序如何知道要提供哪个视图?