在powershell中的csv中将数据前置/附加到一列

时间:2013-12-12 21:50:30

标签: powershell csv

我真的很喜欢我所见过的Powershell。但我对某些事情感到困惑,因为我有很多东西需要学习。我一直在这里阅读网站上的所有内容,但我无法弄清楚这一点。希望这很简单。我有这样的csv:

Title,Name,Office,Phone
Boss,Bob,101,323.555-1212
Office-Manager-Level-2,Helen,202,5-1213
Time-Waster-Level-5,Nemo,105,5-1214
Widget-Maker,Zack,10,5-1215
Temp,Larry,102,5-1000

我一直试图想出一个简单的方法来预先添加&将数据附加到第一列“标题”,这将最终成为包含用户信息的静态网页。到目前为止我正在尝试这个:

$file = ("\\web\users.csv")
$urlbase="<a href`=`"file:///web/users/info/"
$urlend="_info.html`">"
$data = import-csv ($file) -header ("Title","Name","Office","Phone")
$data | select -Skip 1  | % { $_.Title -replace '$_.Title', "'$urlbase'$_.Title'$urlend'`">'$_.Title'</a>"} | Export-CSV -Path "links_output.csv" -NoTypeInformation 

但是 - 我匹配或替换它的所有内容都是第一列数据的字符串(??)的长度。我的输出文件是:

"Length"
"4"
"23"
"19"
"12"
"4"

我想要的是我的输出:

<a href="file:///web/users/info/Boss_info.html"Boss</a>"
<a href="file:///web/users/info/Office-Manager-Level-2_info.html">Office-Manager-Level-2</a>"
<a href="file:///web/users/info/Time-Waster-Level-5_info.html">Time-Waster-Level-5</a>"
<a href="file:///web/users/info/Widget-Maker_info.html">Widget-Maker</a>"
<a href="file:///web/users/info/Temp_info.html">Temp</a>"

此外,除了我的基本问题,如果我可以使用设置内容,我会很高兴,因为我真的希望它像 sed -i 原始文件上的操作/功能类型,但如果我无法在原始文件上设置内容,则新文件与旧文件具有相同内容并且更新后的第一列将满足。

我的脚本的这一部分将在以后成为一个html文件,由于正则表达式查找和替换标签的问题,我正在尝试在使用 ConvertTo-Html 之前添加html标签,因为这一切都已经完成了。在此先感谢!!

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

$file = ("\\web\users.csv")
$urlbase='<a href="file:///web/users/info/'
$urlend='_info.html">'

get-content $file | 
select -Skip 1 |
foreach {
"$Urlbase{0}$urlend" -f $_.split(',')[0]
}

split(',')是[string]的对象方法,它将字符串分割为逗号,从而生成一个数组。尾部[0]采用该数组的第一个元素,即名称。通过格式(-f)运算符在其他两个变量之间的格式字符串中插入{0}。

您可以使用-replace运算符,但不能在替换字符串中使用PS变量。您可以包含文字文字:

(get-content $file | select -Skip 1) -replace '^([^,]+)(.+)','<a href="file:///web/users/info/$1_info.html">$2'