从 psv 文件中删除行分隔符

从 psv 文件中删除行分隔符

我正在从其他数据源获取数据,并且几乎没有问题。其中之一来自文本栏。用户在文本列上按 Enter 键,导出程序将其视为行尾。这使得数据如下所示。

"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Nice$ 
weather"|$

有什么方法可以在尼斯之后删除行分隔符然后在尼斯之后移动天气吗?

"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Niceweather"|$

我正在考虑删除除管道后面的行分隔符之外的行分隔符,但我不知道该怎么做。你能帮助我吗?

答案1

您可以使用以下变体39. 如果一行以反斜杠“\”结尾,则将其追加到下一行Sed 单行解释,第一部分:文件间距、编号以及文本转换和替换

您不想在上一行以 结尾时加入\,而是希望在它结束时加入才不是结束于|.所以给出

$ cat -A file.psv
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Nice$
weather"|$

然后

$ sed -e :a -e '/|$/!N; s/\n//; ta' file.psv | cat -A
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Niceweather"|$

如果你的文件有 DOS 风格的 CRLF 行结尾,即

$ cat -A file.psv
"abc"|"def"|12/28/2019|"hello world"|^M$
"abc"|"def"|12/28/2019|"Nice^M$
weather"|^M$

那么您可以通过将命令更改为来考虑这些

sed -e :a -e '/|\r$/!N; s/\r\n//; ta' file.psv

要就地编辑文件,请添加-i(或者-i.bak例如,保存备份)。要将文件也转换为 Unix 行结尾,请添加-e 's/\r$//'

sed -i.bak -e :a -e '/|\r$/!N; s/\r\n//; ta' -e 's/\r$//' file.psv

相关内容