在 shell 中将垂直文本转换为水平文本

Convert vertical text into horizontal in shell

我只是在 shell 中执行一些任务时思考这个问题。

如何转换包含以下格式文本的 .txt 文件[垂直方向]:

H
e
l
l
o

W
o
r
l
d

Note: The line without any letter contains a space and EOL

我需要转换为:

Hello World

我尝试了以下命令:cat file1.txt |tr '\n' ' ' >file2.txt

输出:

H e l l o  W o r l d

我该如何继续?抱歉,如果这个问题已经出现。如果是这样,请向我提供解决方案的 link 或任何解决方法的命令。

您正在用空格替换新行。相反,使用 -d:

删除它们
$ echo "H
> e
>                   # <- there is a space here
> W
> o" | tr -d '\n'
He Wo

有一个文件:

tr -d '\n' < file   # there is no need to `cat`!

这里的问题是最后一个新行被删除,所以结果是 POSIXly 一个 0 行文件。

你们非常接近...:-)
tr 命令有选项 -d 删除 字符 类,而不是仅仅替换。
所以:

cat file1.txt | tr -d '\n' > file2.txt

会做...

UPDATE:在 OP 评论之后,这是一个保留空换行符的版本:

cat file1.txt | perl -p -i -e 's/\n(.+)//' > file2.txt

示例数据:

echo "$x"
H
e
l
l
o

W
o
r
l
d

解决方案:

  echo "$x"  |sed 's/^$/bla/'|awk 'BEGIN{OFS="";ORS=" ";RS="bla"}{=}1'
  Hello World 

在仔细阅读了所有建议和一点点研究之后,我找到了解决方案,为此编写了一个脚本:

#!/bin/bash
#Converting text to horizontal direction

IFS=''
while read line
do
   echo -n $line
done <  >            #  --> file1.txt contain vertical text as mentioned in the question
echo "$(cat )"

命令:

$./convert.sh file1.txt file2.txt

输出:

Hello World