在Unix中将多个单行文本文件合并为一个单行文本文件
我有三个单行文本文件foo1.txt、foo2.txt和foo3.txt。在我使用cat foo1.txt foo2.txt foo3.txt>foo.txt之后,foo.txt包含我不想要的三行,我想要从每个文件中加入一行。在Unix中将多个单行文本文件合并为一个单行文本文件,unix,Unix,我有三个单行文本文件foo1.txt、foo2.txt和foo3.txt。在我使用cat foo1.txt foo2.txt foo3.txt>foo.txt之后,foo.txt包含我不想要的三行,我想要从每个文件中加入一行。 我尝试了cat foo.txt | sed的/\n//g'>new.txt,但new.txt与foo.txt完全相同。 我尝试了tr'\n'new.txt,同样,new.txt与foo.txt相同。 我尝试了粘贴-sd“\0”foo1.txt foo2.txt foo3.
我尝试了cat foo.txt | sed的/\n//g'>new.txt,但new.txt与foo.txt完全相同。
我尝试了
tr'\n'new.txt
,同样,new.txt与foo.txt相同。我尝试了粘贴-sd“\0”foo1.txt foo2.txt foo3.txt>foo.txt,但是foo.txt仍然包含三行。
我尝试了
echo$(cat foo1.txt foo2.txt foo3.txt)>foo.txt
,虽然foo.txt只包含一行,但所有空格都消失了。有什么建议吗?我刚试过:
echo $(cat file1.txt file2.txt file3.txt)
这似乎删除了文件输出之间的行尾
关于你的空间消失,我没有这种行为:
Prompt> cat test.txt
version = 1.203
Prompt> echo $(cat test.txt test.txt test.txt)
version = 1.203 version = 1.203 version = 1.203
因为您已经在一个文件中找到了它们,所以您要查找的
tr
是tr-d'\n'
$ cat foo.txt
1 1 11 1 1
1 1 11 1 122
1 1 1 1 1 133
$tr -d '\n' < foo.txt > new.txt
$ cat new.txt
1 1 11 1 11 1 11 1 1221 1 1 1 1 133$
注意,我的终端就在那里的末端。如果需要结束换行符,可以添加END{print”\n}
,例如
$ awk 'ORS="";1;END{print"\n"}' 1.txt 2.txt 3.txt
1 1 11 1 11 1 11 1 1221 1 1 1 1 133
$
如果你想在每个文件的行之间留一个空格或什么东西,你可以将ORS设置为任意值并删除1,但是这会留下一个尾随字符,所以你必须将它交换回换行符,例如
$ awk 'ORS="|"' 1.txt 2.txt 3.txt | sed 's/|$/\n/g'
1 1 11 1 1|1 1 11 1 122|1 1 1 1 1 133
编辑在一条评论中,询问awk命令的实际含义:
ORS=”“代码>-设置awk的输出记录分隔符,该分隔符由 将“\n”默认为“无”。ORS在行之间使用,因此这会导致文件中的行被删除 排成一行
1代码>-awk在类似
带有 如果块不存在,则默认行为为打印,因此 是一种编写条件的代码块上工作?{code}
的简单方法。请注意,{print}
充当 块上的条件语句,但在本例中 不赋值被认为是错误的,所以除了 正在设置这些参数。这就是为什么当我们把它改成ORS=”“
我们可以删除1,因为赋值为ORS 被视为true,并将执行ORS=“|”
{print}
-以END开头的块仅在 所有文件的所有行都将被读取,因此这将添加回尾随行 我们通过更换喂食器来移除饲料END{print”\n}
echo$(cat…
是正确的选择。Hi@Dominique-尝试使用一个文件,该文件的行version=1.203
,等号的每一侧有4个空格。(哈哈哈,这篇评论中没有保留空格,尽管它是用背景符号写的)echo
本身将保留空格,是命令的解释将空格折叠;从这个意义上说,这是预期的行为。您需要引用该命令以避免出现这种情况。尝试echo“$(cat file1.txt file2.txt file3.txt)”
在Test.txt之后测试它;1.结束{print“\n”},因为我的awk不工作。请您解释一下什么是“ORS=”“;“1”是什么意思?@pat-对答案做了一些解释,希望能有所帮助。如果这对你有效,请不要忘记投票并接受
$ awk 'ORS="|"' 1.txt 2.txt 3.txt | sed 's/|$/\n/g'
1 1 11 1 1|1 1 11 1 122|1 1 1 1 1 133