如何连接3个文件中的行以形成一行

时间:2015-04-21 11:54:01

标签: shell awk

echo " Student1 " > log1.txt
echo " Marks " > log2.txt
echo " Percentage " > log3.txt

cat log1.txt log2.txt log3.txt > final.txt 
Student1
Marks
Percentage

这给了我上面的输出,但是我需要像下面一行打印输出。请帮帮忙?

Student1 Marks Percentage

2 个答案:

答案 0 :(得分:2)

由于您可以方便地在文件中添加尾随空格:

{ cat log1.txt log2.txt log3.txt | tr -d \\n; echo; }

会做得很好。尾随回显会添加一个尾随的换行符,您可能想要也可能不想要。或者您可以使用awk,它很好地省略了log3.txt上的尾随空格(如果文件实际上没有尾随空格,则添加空格):

cat log[123].txt | awk '{$1=$1}1' RS= OFS=' '

答案 1 :(得分:2)

如果你不关心空白区域,那就是paste发明的工作:

$ paste log?.txt
 Student1        Marks   Percentage

如果您需要在每个字段之间只有一个空格而没有前导空格:

$ echo $(cat log?.txt)
Student1 Marks Percentage

$ echo $(paste log?.txt)
Student1 Marks Percentage

$ awk '{ORS=(FILENAME==ARGV[ARGC-1]?RS:FS); $1=$1}1' log?.txt
Student1 Marks Percentage

或使用GNU awk for ARGIND:

$ awk '{ORS=(ARGIND<(ARGC-1)?FS:RS); $1=$1}1' log?.txt
Student1 Marks Percentage

这看起来像尝试为一些可怕的文本处理shell脚本创建标题行,但是 - 如果是这样,我强烈建议您停下来并询问方向,以便我们可以向您展示如何编写整个内容在awk。 Shell是一种环境,通过该工具可以使用一种语言对这些工具进行排序,这就是所有工具。 shell调用操作文本的工具是awk。