我有一个很大的文件,其中包含目录和文件的列表(由find
生成)。它的内容是这样的:
./12345/a1abeff031.dat
./12345/a1abeef03a.dat
./12345/a1abefa032.dat
./12346/c3abeff031.dat
./12346/a1abeff031.dat
./12347/a2abeff021.dat
所以,我只需要每个目录一个文件(顺序无关紧要),期望的结果是这样的:
./12345/a1abeff031.dat
./12346/c3abeff031.dat
./12347/a2abeff021.dat
如何使用shell / awk / grep / sed或其他命令行工具获得此信息?
答案 0 :(得分:2)
请您尝试一次。
awk -F'/' '!a[$2]++' Input_file
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -E ':a;N;s/^(([^/]*\/[^/]*\/).*)\n\2.*/\1/;ta;P;D' file
在整个文件中打开一个2行的窗口,并删除仅打印第一个目录的所有重复目录。
要打印一组重复的最后一个文件,请使用:
sed -E 'N;/^([^/]*\/[^/]*\/).*\n\1/!P;D' file
答案 2 :(得分:0)
使用Perl
perl -F"/" -lane ' print unless $kv{$F[1]}++ '
使用给定的输入
$ cat leonard.txt
./12345/a1abeff031.dat
./12345/a1abeef03a.dat
./12345/a1abefa032.dat
./12346/c3abeff031.dat
./12346/a1abeff031.dat
./12347/a2abeff021.dat
$ perl -F"/" -lane ' print unless $kv{$F[1]}++ ' leonard.txt
./12345/a1abeff031.dat
./12346/c3abeff031.dat
./12347/a2abeff021.dat
$