Ram*_*mar 5 sed awk text-processing
我想从分隔符为逗号的数据文件中提取“”之间的数据。
输入文件示例:
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10,000",8/13/2019,
Run Code Online (Sandbox Code Playgroud)
预期产量:
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10000",8/13/2019,
Run Code Online (Sandbox Code Playgroud)
假设这是格式正确的 CSV(示例数据在这方面看起来没问题),我们可以使用csvformatfromcsvkit临时将字段分隔符更改为数据中不存在的其他字符,例如@,删除所有逗号,然后更改字段分隔符再次恢复默认:
$ csvformat -D '@' file.csv | tr -d , | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,
Run Code Online (Sandbox Code Playgroud)
输出在我们修改的字段周围没有引号,但那是因为它不再需要它。
显然,“删除所有逗号”可能会删除我们实际上不想删除的逗号,因此我们可以更有选择性,只删除第 7 个字段中的逗号:
$ csvformat -D '@' file.csv | awk -F '@' 'BEGIN { OFS=FS } { gsub(",", "", $7); print }' | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,
Run Code Online (Sandbox Code Playgroud)