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