基于某些特定字符串的出现在Unix中拆分文件

问题描述 投票:0回答:1

我的文件内容如下

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

我必须把它分成两个文件,比如

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脚本知之甚少。行数会有所不同。

file unix file-processing
1个回答
1
投票

使用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是一个丑陋的黑客,用正确的分隔符重建你的行^^

© www.soinside.com 2019 - 2024. All rights reserved.