使用重复的最后一个字段提取行

时间:2017-03-03 19:49:05

标签: bash sorting awk

基于使用命令生成的列表

.AddBtn {
    padding: 10px 70px 10px 70px;
    background-color: white;
    cursor:pointer;
}
.centerthis {
    text-align:center;
}
.radioSelect {
    width: 20px;
    float: right;
    margin: 0px 115px 0px 0px;
}
.radioLabel {
     float:left;
     margin-left: 80px;
}
.insertWorkoutFormHolder {
    width: 350px;
    margin:auto;
}
.workoutVariSelect {
    width: 100%;
    padding: 11px;
    border: 1px solid white;
    -webkit-appearance: none;
    -moz-appearance: none;
    text-indent: 1px;
    text-overflow: '';
    font-family: Verdana;   
    font-weight: 500;
    background: #fff center right 10px no-repeat url('Images/pil.jpg'); 
    background-size: 12px 8px;
    cursor: pointer;
    user-select: none;
    margin: 0;
    vertical-align: middle;
}
.insertWorkoutBoxes {
    border: 1px solid white;
    width: 100%;
    margin: 5px 0px;
    padding: 11px;
}

仅获取包含多次出现的文件名列表(重复),但我希望不仅显示文件名的全行。

  • 文件名仅考虑文件名而不是完整路径。

实施例

基于此文件:

find '/patch' -name A* -exec ls -la {} \;

我想得到这个结果:

-rw-r--r-- 1 root root 34K Jan  9  2014 /usr/share/dia/sheets/AADL.sheet
-rw-r--r-- 1 root root 952 Fev 14 07:07 /usr/share/postgresql/9.3/man/man7/ABORT.7.gz
-rw-r--r-- 1 root root 955 Jul 30  2014 /usr/share/postgresql/9.1/man/man7/ABORT.7.gz
-rw-r--r-- 1 root root 92K Abr 28  2014 /usr/share/gettext/ABOUT-NLS
-rw-r--r-- 1 root root 545 Dez 14  2013 /usr/share/dia/sheets/Automata.sheet
-rw-r--r-- 1 root root 6,7K Dez 21 2012 /usr/share/perl5/Mail/Address.pm
-rw-r--r-- 1 root root 709 Mar  3 09:03 /home/test/Address.pm
-rw-r--r-- 1 root root 709 Mar  3 11:13 /home/test/Automata.sheet
-rw-r--r-- 1 root root 520 Mar  3 11:15 /home/test/t2/Address.pm

使用此命令

-rw-r--r-- 1 root root 952 Fev 14 07:07 /usr/share/postgresql/9.3/man/man7/ABORT.7.gz
-rw-r--r-- 1 root root 955 Jul 30  2014 /usr/share/postgresql/9.1/man/man7/ABORT.7.gz
-rw-r--r-- 1 root root 6,7K Dez 21 2012 /usr/share/perl5/Mail/Address.pm
-rw-r--r-- 1 root root 709 Mar  3 09:03 /home/test/Address.pm
-rw-r--r-- 1 root root 520 Mar  3 11:15 /home/test/t2/Address.pm
-rw-r--r-- 1 root root 545 Dez 14  2013 /usr/share/dia/sheets/Automata.sheet
-rw-r--r-- 1 root root 709 Mar  3 11:13 /home/test/Automata.sheet

我得到了

awk -F. '{ n = split($0, a, "/"); print a[n] }' file |sort | uniq -d > filedups

之后

ABORT.7.gz
Address.pm
Automata.sheet

我得到了预期的结果。

我的问题: 有没有直接的方法使用awk和/或其他命令在一行中执行此操作?

1 个答案:

答案 0 :(得分:1)

awk救援!

从您的初始文件开始

$ awk '{n=split($NF,a,"/"); k=a[n]; c[k]++; 
        v[k]=k in v?v[k] ORS $0:$0} 
   END {for(k in c) if(c[k]>1) print v[k]}' file

-rw-r--r-- 1 root root 6,7K Dez 21 2012 /usr/share/perl5/Mail/Address.pm
-rw-r--r-- 1 root root 709 Mar  3 09:03 /home/test/Address.pm
-rw-r--r-- 1 root root 520 Mar  3 11:15 /home/test/t2/Address.pm
-rw-r--r-- 1 root root 545 Dez 14  2013 /usr/share/dia/sheets/Automata.sheet
-rw-r--r-- 1 root root 709 Mar  3 11:13 /home/test/Automata.sheet
-rw-r--r-- 1 root root 952 Fev 14 07:07 /usr/share/postgresql/9.3/man/man7/ABORT.7.gz
-rw-r--r-- 1 root root 955 Jul 30  2014 /usr/share/postgresql/9.1/man/man7/ABORT.7.gz