【问题标题】:Concatenating file using cat command使用 cat 命令连接文件
【发布时间】:2013-11-09 12:08:58
【问题描述】:

我是 unix 新手,我在使用 cat 命令时正在玩命令,我发现了意外的输出。

我有。

test and the content of test is
line 1
test2 and the content of test2 is
line 2

这是我输入的。

cat test2>>test>test3

结果是

line 2

所以我的问题是为什么不是

line 1
line 2

此代码不应该将 test 与 test2 连接起来,然后将其添加到 test3 中吗?

【问题讨论】:

  • 如果您对 cat 语法的工作原理进行更多研究,我认为您不会问这个问题。如果要连接,则需要用一个空格分隔 texttest2。然后使用 > 将输出通过管道传输到 test3。所以你刚才所做的是取 test2 并替换 test 然后替换 test3
  • 我没有问如何使用 cat 追加。我给出了一个不会导致错误的 cat 语法,我问我为什么得到这个结果。
  • 你搞错了。好的,您将自己解决这个难题。首先执行此操作并告诉我结果 cat test2>>test
  • 我不明白为什么你不明白我知道你提供的语法可以正常工作,但这不是我想要的。
  • 让我重新表述您的问题:当您运行命令 cat test2>>test>test3 时,您希望输出是第 1 行
    第 2 行,它是单独的行.对吗?

标签: linux unix


【解决方案1】:

当你多次重定向程序的标准输出流时,如

cat test2 >>test >test3

重定向是按照您编写的顺序设置的。在这种情况下,shell 以附加模式打开test,并将其设置为cat 的标准输出。然后它以覆盖模式打开test3,并将其设置为标准输出,覆盖之前的重定向。

如果test可以打开,整个命令的净效果是一样的:

cat test2 >test3

也就是说,line 2 被写入test3。如果你想将 test 和 test2 连接到 test3 你应该使用:

cat test test2 >test3

或分两步完成:

cat test2 >>test
cat test >test3

【讨论】:

  • 现在我开始明白了。所以它将第一个输入作为输出然后覆盖它的模式并忽略中间的其他文件,对吗?所以当我交换 > & >> test2>test>>test3 为什么它删除了 test 中的内容并且它没有附加到 test3 中,因为 test3 中的结果是 line2
  • 使用cat test2>test>>test3,shell首先以覆盖模式打开test,这意味着文件首先被截断(清空)。然后它以追加模式打开test3,因此cattest2的内容写入test3现有内容之后。如果您只在 test3 中找到“line2”,请确保 test3 有开头且 test2 不为空。
【解决方案2】:

你可以这样尝试:-

cat test1.txt test2.txt > test3.txt

同时检查What is Linux cat Command?

如果您想查看 Cat 命令的工作原理,可以查看 tutorial

使用 >> 可确保保留 bigcats 的任何先前内容。这 panther 的内容附加到 bigcats。如果您要使用 > 操作员在这里,您可以将 bigcats 的内容替换为 黑豹的内容。当您希望添加到末尾时,请始终使用 >> 现有文件。

【讨论】:

  • 我知道我,但我不想那样做擦除测试
  • @user2954718:- 更新了我的答案。希望能回答您的问题!
  • @user2954718 为什么不简单地检查一下 cat 语法
  • @user2954718 :- 还要检查 wiki 中的猫:- en.wikipedia.org/wiki/Cat_(Unix)
  • @chelsea 这与简单的 cat 命令无关。我同时使用 2 个命令而不是一个,我没有收到错误我得到 2 个奇怪的输出我试图找出原因。这只是学术性的。至于 Rahul,如果您在这里查看我的第一条评论中的代码,您会看到 test 在中间,所以 test 的内容应该与 test2 相同,然后它附加在 test3 中,所以为什么 test 的内容会被清除
【解决方案3】:

试试这个并应用到你的:

file1
Hello

file2
Goodbye

cat file1 file2 > fileresult

fileresult
Hello
Goodbye

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2016-08-08
    • 1970-01-01
    • 2015-06-06
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多