我试图管理一个文件. xlsx在bash与CSV格式。
我确实将excell文件(. xlsx)转换为. csv(CSV UTF-8(逗号分隔)),以开始管理列。
但是,我注意到在excell文件(. xlsx)中,信息包含在列换行符(\n)的单元格中。
你能帮助解决这个问题吗?
The way it look at vim the converted file from xlsx to csv
The information it's not shown properly due to a problems in the segmentation of columns的
在图像之前,我应用的命令是:cat file| awk-F '|''{print $2 "|“七块钱。”|“二十七块。”|“二十九块。”|“三十块。”|"$31}"
- 我确实想到了一个解决方案,通过使用以下命令来使用sed来消除\n:sed ':a; N;$! ba; s/\n//g'文件How can I replace each newline (\n) with a space using sed?然后我可以替换回车符(^M)(例如,|sed-e 's/^M/\n/g')来使用awk正确管理每一列(例如输入|awk-F '|''{print $2 "|“七块钱。”|“二十七块。”|“二十九块。”|“三十块。”|"$31}")
然而,我认为解决方案不起作用,因为通过应用第一个sed命令,所有信息都停留在同一行中,然后我无法使用awk命令管理它。
你想到别的解决办法了吗?
The csv file after applying sed ':a;N;$!ba;s/\n/ /g'的
我的期望值为The info of each line be with \n to be able to manage with awk each columnThe result I expect is as shown here by applying the awk command
1条答案
按热度按时间erhoui1w1#
从XLS导出CSV通常在字段中单独使用LF,在记录末尾使用CR-LF,即它看起来像:
字符串
实际上只有2条记录,但有些字段包含LF(上面的
$
)。CR显示为上面的^M
。考虑到这种输入格式,要将行末尾的CR-LF转换为LF,并将引用字段中的任何LF转换为空白(只是删除它们会破坏剩余的文本),这将使用任何awk:
型
请注意,尽管输入在每条记录的末尾都包含CR-LF,但我们不能依赖awk,因为底层平台的C原语可能会在awk看到它们之前剥离这些CR。在GNU awk中,您可以通过设置
BINMODE=3
来解决这个问题,但这不能移植到其他awk。有关使用awk解析CSV的更多信息,请参见What's the most robust way to efficiently parse CSV using awk?。