我将excel数据导出到制表符分隔的txt文件中,但是我很难在终端中打印它,这是文件:
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
您可以下载文本文件here。
我尝试使用sed和awk。
update1:我在bsd(mac)上,cat file.txt以难看的丑陋格式打印,我有一个需要输入标签的bash脚本,所以我先打印标签然后从中选择正确的标签打印清单
答案 0 :(得分:6)
您的文件存在两个问题:
它有旧的Mac风格的行结尾。这些会导致Unix终端上的输出以令人困惑的方式被覆盖
缺少最终换行符。
解决此问题的一种方法是:
$ tr '\r' '\n' <test_tab_delimited.txt ; echo ""
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
这里,tr '\r' '\n'
用换行符替换所有回车字符(Mac样式的行结尾)(unix样式的行结尾)。 echo ""
语句添加了最终换行符。
$ awk 1 RS='\r' test_tab_delimited.txt
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
此处的awk程序由单个字符1
组成。这告诉awk打印它读取的每条记录
选项设置RS='\r'
告诉awk将回车符\r
视为输入上的记录分隔符。
$ sed 's/\r/\n/g; s/$/\n/' test_tab_delimited.txt
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
我们在这里使用两个sed命令:
s/\r/\n/g
告诉sed将回车替换为找到的换行符。
s/$/\n/
告诉sed在每行末尾添加最终换行符。这只发生一次,因为在输入时,文件没有换行符,因此,sed将整个文件视为一行。
[此解决方案在GNU(Linux)sed上进行了测试。使其在BSD(OSX)sed下运行可能需要一些小的改动。]
$ grep -oP '[^\r]*(?=\r|$)' test_tab_delimited.txt
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
此解决方案需要GNU grep
。它不适用于Mac上安装的默认grep
。
您的系统可能还安装了一个实用程序,可能名为mac2unix
,用于执行此转换。