在 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
我只是在 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