【问题标题】:Unix shell scripting - multiple file concatenateUnix shell 脚本 - 多个文件连接
【发布时间】:2016-05-03 16:56:33
【问题描述】:

考虑场景-

文件1:

mike;john;552
mike;mike;555
john;mike;121

文件2:

aks;raj;425
man;joe;895
mike;john;552

假设file1和file2包含上述两组数据。我想将这两个文件中的数据放入另一个文件中,其中数据为 uniq(意思是:file1 和 file2 包含公共数据mike;john;552,但是在合并文件时我不想重复。

我使用了命令:

cat file1 file2 | sort -u > file3

但这只给了我共同的行,即复制到 file3。

也试过了

cat file1 file2 | uniq > file3

没有产生所需的结果。

预期输出: 文件3:

mike;john;552
mike;mike;555
john;mike;121
aks;raj;425
man;joe;895

注意:file3中的数据可以是任意顺序。

请帮忙。

【问题讨论】:

  • cat file1 file2 | sort -u 很适合我:file1 和 file2 中的所有行合并,重复行只打印一次。
  • CNR。这些工具根据所描述的期望行为精确地工作。
  • 现在可以了,猜是空格问题。谢谢!

标签: shell unix


【解决方案1】:

你的第一个命令对我有用,并给出了预期的输出:

$ cat -v file1
mike;john;552
mike;mike;555
john;mike;121

$ cat -v file2
aks;raj;425
man;joe;895
mike;john;552

$ cat file1 file2 | sort -u > file3
$ cat file3
aks;raj;425
john;mike;121
man;joe;895
mike;john;552
mike;mike;555

如果您没有遇到这种情况,请使用cat -vE 找出原因。这里有两个例子:

$ cat file1 file2 | sort -u
foo
foo   

$ cat file1 file2 | sort -u | cat -vE
foo$
foo   $

在这种情况下,您似乎得到了重复,但由于尾随空格,这些行实际上是不同的。

$ cat file1 file2 | sort -u 
foo
foo
$ cat file1 file2 | sort -u | cat -vE
foo$
foo^M$

在这种情况下,您似乎也得到了重复文件,但是一个文件有回车,因为它是以 DOS/Windows 模式而不是 Unix 模式保存的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多