获取输出的第二部分,以两个空格分隔

时间:2019-04-05 12:15:24

标签: bash

我有这个脚本

try
{
    Process.Start(path);
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

它输出以下内容:

library(multilevel)

data <- sim.multi(n.obs=4,nvar = 2, nfact=2, ntrials=96, days=16, mu=0,sigma=1, fact=NULL, loading=.9, phi=0,phi.i=NULL,beta.i=0,mu.i=0, sigma.i = 1,sin.i=0, cos.i=0, AR1=0, f.i=NULL, plot=TRUE)

现在,我只想将最后一部分(路径)保存在数组中。 当我在排序之后添加

#!/bin/bash

path=$1

find "$path" -type f -exec sha1sum {} \; | sort | uniq -D -w 32

我将其作为输出:

3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16  ./dups/dup1-1.txt
3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16  ./dups/dup1.txt
ffc752244b634abb4ed68d280dc74ec3152c4826  ./dups/subdups/dup2-2.txt
ffc752244b634abb4ed68d280dc74ec3152c4826  ./dups/subdups/dup2.txt

| awk -F " " '{ print $1 }' 更改为3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16 3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16 ffc752244b634abb4ed68d280dc74ec3152c4826 ffc752244b634abb4ed68d280dc74ec3152c4826 时,什么也没得到,但是我想获取文件的路径。

我应该怎么做?

编辑:

此脚本

$1

输出

$2

当我将其更改为#!/bin/bash path=$1 find "$path" -type f -exec sha1sum {} \; | awk '{ print $1 }' | sort | uniq -D -w 32 时,它将输出

parallels@mbp:~/bin$ duper ./dups
3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16
3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16
ffc752244b634abb4ed68d280dc74ec3152c4826
ffc752244b634abb4ed68d280dc74ec3152c4826

预期产量

$2

目录中的某些文件互不重复。如nodup1.txt和nodup2.txt。这就是为什么它不显示。

3 个答案:

答案 0 :(得分:1)

将您的find命令更改为此:

find "$path" -type f -exec sha1sum {} \; | uniq -D -w 41 | awk '{print $2}' | sort

我将uniq作为第一个过滤器,它只考虑了前41个字符,目的是仅匹配sha1sum哈希。

答案 1 :(得分:0)

您可以将相同的结果传递到tr,然后传递到cut

 echo '3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16  ./dups/dup1-1.txt' |\
      tr -s ' ' | cut -d ' ' -f 2

输出:

./dups/dup1-1.txt
    tr 上的
  • -s ' '压缩空间
  • -d ' ' -f 2上的
  • cut用于输出用空格分隔的第二个字段

答案 2 :(得分:0)

我喜欢使用cut这样的东西。输入以下内容:

3c8b9f4b983afa9f644d26e2b34fa3e03a2bef16  ./dups/dup1-1.txt

我会做cut -d ' ' -f 2,应该返回:

./dups/dup1-1.txt

我还没有针对您的情况进行测试。

编辑:贡萨洛·马修(Gonzalo Matheu)的回答更好,因为他确保在执行剪切之前删除输出之间的任何多余空间。