我试图在文本文件(test.log)中找到重复的* .sh条目,并使用shell程序将其删除。由于路径不同所以uniq -u总是打印重复条目,即使文本文件中有两个first_prog.sh条目
cat test.log
/mnt/abc/shellprog/test/first_prog.sh
/mnt/abc/shellprog/test/second_prog.sh
/mnt/abc/my_shellprog/test/first_prog.sh
/mnt/abc/my_shellprog/test/third_prog.sh
输出:
/mnt/abc/shellprog/test/first_prog.sh
/mnt/abc/shellprog/test/second_prog.sh
/mnt/abc/my_shellprog/test/third_prog.sh
我尝试了几个使用少量命令的方法,但对如何获得高于输出的想法并不知道。
rev test.log | cut -f1 -d/ | rev | sort | uniq -d
有什么线索吗?
答案 0 :(得分:3)
您可以通过在/
上拆分字段并在关联数组中使用$NF
(最后一个字段)来使用awk:
awk -F/ '!seen[$NF]++' test.log
/mnt/abc/shellprog/test/first_prog.sh
/mnt/abc/shellprog/test/second_prog.sh
/mnt/abc/my_shellprog/test/third_prog.sh
答案 1 :(得分:0)
awk
为这些任务提供了亮点,但这里的解决方案是非awk,
$ sed 's|.*/|& |' file | sort -k2 -u | sed 's|/ |/|'
/mnt/abc/shellprog/test/first_prog.sh
/mnt/abc/shellprog/test/second_prog.sh
/mnt/abc/my_shellprog/test/third_prog.sh
或者,如果您的路径是平衡的(所有文件的父项数相同)
$ sort -t/ -k5 -u file
/mnt/abc/shellprog/test/first_prog.sh
/mnt/abc/shellprog/test/second_prog.sh
/mnt/abc/my_shellprog/test/third_prog.sh
答案 2 :(得分:0)
awk '!/my_shellprog\/test\/first/' file
/mnt/abc/shellprog/test/first_prog.sh
/mnt/abc/shellprog/test/second_prog.sh
/mnt/abc/my_shellprog/test/third_prog.sh