我有一个 linux 服务器,它将全天生成几个需要插入数据库的文件;使用 Putty,我可以将它们 sftp 到运行 SQL 2008 的服务器。问题是文件本身的结构,它有一个要放在不同列中的文本字符串,但是在 sql 中批量插入会尝试将其全部放入到一列而不是六列。Powershell 可能不是最好的方法,但我在几个网站上看到它如何查找和替换或附加到行尾,它可以计数和插入吗?
所以文件看起来是这样的:'18240087A +17135555555 3333333333',其中18、24、00、87、A是不同的列,那么A和+之间有一个空格,即字符数10-19即另一列,然后字符 20-30 是一列,字符 31-36 是一个空格,它是新列,依此类推。所以我想插入一个'|' 或“,”,以便 sql 了解列的结束位置。PowerShell可以随机计数吗?
这可能不是回应所有回答的人的方式,我提前道歉。由于这是我的第一个 PowerShell 脚本,我感谢你们每个人的意见。这是生成 CDR 记录的 Avaya SIP 服务器,我必须从服务器中提取这些记录并将其插入 SQL 以供以后报告。导出的文件如下所示:
10/15 18:47
18470214A +14434444444 3013777777 CME-SBC HHHH-CM 4 M00 0
起初我只是想删除第一行并针对输出运行一个脚本,这是我从 Kieranties 帖子中修改的:
$test = 获取内容 C:\Share\CDR\testCDR.txt
$pattern = "^(.{2})(.{2})(.{1})(.{2})(.{1})(.{1})\s*(.{15}) (.{10})\s*(.{7})\s*(.{7})\s*(.{1})\s*(.{1})(.{1})(. {1})\s*(.*)$"
if($test -match $pattern){ $result = $matches.Values | 选择 -first ($matches.Count-1)
[array]::Reverse($result, 0, $result.Length)
$result = $result -join "|"
$result | Out-File c:\Share\CDR\results1.txt
}
但后来我意识到我需要第一行,因为它包含日期。不过,我可以尝试以另一种方式解决这个问题。
我现在还看到有时文件包含 2 行或更多行 CDR 信息,例如:
10/15 18:24
18240087A +14434444444 3013777777 CME-SBC HRSA-CM 4 M00 0
18240096A +14434444445 3013777778 CME-SBC HRSA-CM 4 M00 0
而我制作的 .ps1 文件没有给出第二个字符串,所以我尝试添加:
foreach ($test 中的$Data) { $Data = $Data -split(',')
它无法运行。我怎样才能做多行(可能还有第一行)?如果您知道可以提供帮助的教程,那也将不胜感激!