排除 cat / ls 结果中的重复项
Excluding duplicates in cat / ls result
我在一个文件中有数百行具有相同的结尾。
我的锻炼(结果相同):
$ cat x.txt | sort -u
$ cat x.txt | sort -u | uniq -u
$ cat x.txt | sort -u | awk '!a[[=10=]]++'
media_w2089898193_b1344100_sleng_2437.ts
media_w2089898193_b1344100_sleng_2438.ts
media_w2089898193_b1344100_sleng_2439.ts
media_w2089898193_b1344100_sleng_2440.ts
media_w950159543_b1344100_sleng_2439.ts
media_w950159543_b1344100_sleng_2440.ts
media_w950159543_b1344100_sleng_2441.ts
..........so on and on.................
我希望结果变成这样:
media_w2089898193_b1344100_sleng_2437.ts
media_w2089898193_b1344100_sleng_2438.ts
media_w2089898193_b1344100_sleng_2439.ts
media_w2089898193_b1344100_sleng_2440.ts
media_w950159543_b1344100_sleng_2441.ts
..........so on and on.................
您需要用 4 位数字索引数组,因此:
cat x.txt | sort -u | awk -F [\._] '{ if (a[]=="") { a[]=[=10=] } } END { PROCINFO["sorted_in"]="@ind_num_asc";for (i in a) { print a[i] } }'
设置。和_作为字段分隔符,然后建立一个数组a,以第5个分隔符(4位代码)为索引,行为值。最后,按数组索引顺序排序并打印数组的每个值。
使用这个 Perl 单行代码:
perl -ne '/.*(\d+)/; print if !$seen{}++;' in_file
Perl 单行代码使用这些命令行标志:
-e
: 告诉 Perl 查找内联代码,而不是在文件中。
-n
:一次循环输入一行,默认分配给 $_
。
/.*(\d+)/
: 捕获到 </code> 1 个或多个数字的最后一段。<br />
<code>print if !$seen{}++;
:仅打印每个捕获的数字段的第一次出现。
另请参见:
perldoc perlrun
: how to execute the Perl interpreter: command line switches
perldoc perlrequick
: Perl regular expressions quick start
我在一个文件中有数百行具有相同的结尾。
我的锻炼(结果相同):
$ cat x.txt | sort -u
$ cat x.txt | sort -u | uniq -u
$ cat x.txt | sort -u | awk '!a[[=10=]]++'
media_w2089898193_b1344100_sleng_2437.ts
media_w2089898193_b1344100_sleng_2438.ts
media_w2089898193_b1344100_sleng_2439.ts
media_w2089898193_b1344100_sleng_2440.ts
media_w950159543_b1344100_sleng_2439.ts
media_w950159543_b1344100_sleng_2440.ts
media_w950159543_b1344100_sleng_2441.ts
..........so on and on.................
我希望结果变成这样:
media_w2089898193_b1344100_sleng_2437.ts
media_w2089898193_b1344100_sleng_2438.ts
media_w2089898193_b1344100_sleng_2439.ts
media_w2089898193_b1344100_sleng_2440.ts
media_w950159543_b1344100_sleng_2441.ts
..........so on and on.................
您需要用 4 位数字索引数组,因此:
cat x.txt | sort -u | awk -F [\._] '{ if (a[]=="") { a[]=[=10=] } } END { PROCINFO["sorted_in"]="@ind_num_asc";for (i in a) { print a[i] } }'
设置。和_作为字段分隔符,然后建立一个数组a,以第5个分隔符(4位代码)为索引,行为值。最后,按数组索引顺序排序并打印数组的每个值。
使用这个 Perl 单行代码:
perl -ne '/.*(\d+)/; print if !$seen{}++;' in_file
Perl 单行代码使用这些命令行标志:
-e
: 告诉 Perl 查找内联代码,而不是在文件中。
-n
:一次循环输入一行,默认分配给 $_
。
/.*(\d+)/
: 捕获到 </code> 1 个或多个数字的最后一段。<br />
<code>print if !$seen{}++;
:仅打印每个捕获的数字段的第一次出现。
另请参见:
perldoc perlrun
: how to execute the Perl interpreter: command line switches
perldoc perlrequick
: Perl regular expressions quick start