因为前几天我把宝宝文件也改了,需要重新生成一下PetTypeAttr
V1:
# 读取输入文件名和输出文件名参数
param(
[Parameter(Mandatory=$true)]
[string]$input_file,
[Parameter(Mandatory=$true)]
[string]$output_file
)
# 读取输入文件中的所有行
$data = Get-Content $input_file -Encoding UTF8
# 初始化已处理的第三列数据数组和需要输出到文件的数据数组
$processed_data = @()
$output_data = @()
# 处理每一行数据
foreach ($line in $data) {
# 将每行数据按制表符分隔为多个字段
$fields = $line.Split("`t")
# 将第三列转换为整数
$col3 = [int]$fields[2]
# 如果第一列中的值是一个五位数字,则删除最后一位
if ($fields[0] -match "^\d{5}$") {
$fields[0] = $fields[0].Substring(0, 4)
}
# 判断第三列是否已经存在于已处理的第三列数据数组中,若存在则跳过
if ($processed_data -contains $col3) {
continue
}
# 将处理后的第一列数据替换到第三列
$fields[2] = $fields[0]
# 将需要输出到文件的行数据加入输出数组和已处理的第三列数据数组中
$output_data += ,($fields[2],$fields[1],$fields[3])
$processed_data += ,$col3
}
# 对需要输出到文件的数据按第三列进行排序
$output_data = $output_data | Sort-Object {[int]$_.Item(0)}
# 将处理完成的数据输出到文件
$output_data | ForEach-Object { $_ -join "`t" } | Out-File -FilePath $output_file -Encoding UTF8
# 输出处理完成的消息
Write-Output "Done."
重新修改了V2:
# 读取输入文件名和输出文件名参数
param(
[Parameter(Mandatory=$true)]
[string]$input_file,
[Parameter(Mandatory=$true)]
[string]$output_file
)
# 读取输入文件中的所有行
$data = Get-Content $input_file -Encoding UTF8
# 初始化一个空的 hashtable 用于记录已经输出过的第三列的值
$processed_values = @{}
# 处理每一行数据
foreach ($line in $data) {
# 将每行数据按制表符分隔为多个字段
$fields = $line.Split("`t")
# 获取第三列的数值
$value_3 = $fields[2]
# 如果已经处理过这个值,则直接跳过
if ($processed_values.ContainsKey($value_3)) {
continue
}
# 将这个值标记为已处理
$processed_values[$value_3] = $true
# 获取需要输出的列
$value_2 = $fields[1]
$value_4 = $fields[3]
# 将这三列的值组合成一个字符串
$output_line = "$value_3`t$value_4`t$value_2"
# 将处理后的行数据输出到输出文件
$output_line | Out-File -FilePath $output_file -Append -Encoding UTF8
}
# 输出处理完成的消息
Write-Output "Done."
|