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



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

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

H
e
l
l
o
W
o
r
l
d

注意:不带字母的行包含空格和EOL

我需要转换为:

Hello World

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

输出:

H e l l o  W o r l d

我该如何继续?抱歉,如果这个问题已经出现了。如果是这样,请提供给我的链接到解决方案或任何命令周围的工作。

您正在用空格替换新行。相反,用-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`!

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

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

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

Will just do…

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

cat file1.txt | perl -p -i -e 's/n(.+)/$1/' > 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=$1}1'
  Hello World 

经过所有的建议和一点点的研究,我找到了一个解决方案,为相同的脚本:

#!/bin/bash
#Converting text to horizontal direction
IFS=''
while read line
do
   echo -n $line
done < $1 > $2           # $1 --> file1.txt contain vertical text as mentioned in the question
echo "$(cat $2)"

命令:

$./convert.sh file1.txt file2.txt
输出:

Hello World

相关内容

  • 没有找到相关文章

最新更新