本帖最后由 went 于 2022-1-8 13:09 编辑
回复 11# 5i365
还是 输入0.csv 输出1.csv- #&cls&@powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" &pause&exit
- cls
- #函数 获取两个字符串最大相同字符个数
- function Get-SameNum([string]$str1,[string]$str2){
- $max = $len = 0
- if($str1.Length -le $str2.Length){
- $len = $str1.Length; $s1 = $str1; $s2 = $str2
- } else {
- $len = $str2.Length; $s1 = $str2; $s2 = $str1
- }
- for($i = 0;$i -lt $len; $i++){
- if($len-$i -le $max){ break; }
- for($j = 1; $j -lt $len-$i+1; $j++){
- $s_t = $s1.Substring($i,$j)
- if($s2.IndexOf($s_t) -ne -1){
- if($s_t.Length -gt $max){ $max = $s_t.Length }
- }
- }
- }
- return $max
- }
-
- #阈值设置 >=
- $m1 = 3
- $m2 = 3
- #比较并输出
- $list = [System.Collections.ArrayList](Get-Content '0.csv' -Encoding UTF8 | Select-Object -Skip 1)
- &{
- &{
- $list | Sort-Object {
- $arr = $_ -split ','
- ($arr[2] -replace '[\(\[\{].*[\)\]\}]',''),
- ($arr[3] -replace '[\(\[\{].*[\)\]\}]',''),
- ($arr[0])
- } | foreach {
- $line = $_
- $singer = ($_ -split ',')[2]
- $song = ($_ -split ',')[3]
- if($last_line -ne $null){
- $a = Get-SameNum -str1 $singer -str2 $last_singer
- if($a -ge $m1){
- $b = Get-SameNum -str1 $song -str2 $last_song
- if($b -ge $m2){
- if(!$last){ $last_line; $last = $true}
- $_
- }
- } else {
- $last = $false
- }
- }
- $last_line = $line
- $last_singer = $singer
- $last_song = $song
- }
- }
- } | Out-File '1.csv'
复制代码
|