按照题目,接下来的话应该就是“ 莫搞定啊!在线等大佬解救地说,真是挺急的” -- 呵呵,要果真如此,那还有此文啥事呢 ?
话说,是在码云上一个自创的开源项目上,筛选出了多行数据,要把它们拼凑成一行,再拷贝到《飞书》的在线表格里的。本来以为够简单,多行变一行么,即使是Linux Bash,应亦不在话下,结果呢......
试了以下N种方法:
- sed ':a ; N;s/\n/\ \t / ; t a ; ' HasUpdate.txt
- sed ':a ; N;s/\n/\t\t / ; t a ; ' HasUpdate.txt
- cat HasUpdate.txt | xargs echo -e "\t"
- cat HasUpdate.txt | tr '\n' $(echo 9 | awk '{printf("%c", $1)}')
- cat HasUpdate.txt | tr '\n' "\11"
- cat HasUpdate.txt | awk '{print $1"\t"$2}'
- cat HasUpdate.txt | tr '\n' "+" | awk -F "+" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9}'
这些方法在Konsole终端内,都能连成一长串,可只要一拷贝到飞书XLS里,就全挤进了一个单元格里,并没有我想象中的每一个数字依次进不同的单元格!Linux的三件大杀器:sed / awk / tr ,全试过了; 制表符的三种表示法:/t /11 /9,也全试了;它们之间的组合,更没有错过。结果都~木~有~效~啊!
既然进不去,那就想着怎么出来的吧。随便在A1单元格里填上A,B1单元格里填上B,然后把A1和B1单元格一起复制出来,看到的就是“A B”,中间的看似空格,肯定是制表符的。将它存在随便一个文本文件里,再用ghex打开查看,果然就是“65 9 66",摆明了就是这三个字符的16进制数啊!那真是鬼来了,那我就把这三个重新复制进飞书呢,我去~~三合一! 问题原因至此找到,就是Linux下的终端,对制表符的支持是有大大的问题的,导致了像LibreOffice、飞书等电子试算表软件,都无法将它分隔开来。
原因知道了,解决自然简单。终端之道路既然不通,那就用文本文件保存咯。程序保存成一行后,再打开复制,不管到哪里,都能被分开了。