我想请求如何将以下行转换为PowerShell命令的帮助。
awk 'BEGIN{OFS=FS=","}$15==1{$15=$13"="$14}{print > "AJB_AWK"}'
我有一个逗号分隔文件(没有标题),我需要做的是检查第15个字段是否为1.如果是,我需要将其转换为第13列“=”第14列的值。我已经做了一项研究,但找不到合适的命令让它发挥作用。
答案 0 :(得分:1)
您要查找的cmdlet是Import-Csv
,Export-Csv
和ForEach-Object
。通常,您不会在PowerShell中按索引引用CSV字段,而是按实际字段/列名称引用。如果您的文件没有标题,则可以通过-Header
的{{1}}参数自行定义。
Import-Csv
用适当的列名替换$headers = 'h01', ..., 'h13', 'h14', 'h15', ...
(Import-Csv 'C:\path\to\input.csv' -Header $headers) | ForEach-Object {
if ($_.h15 -eq 1) {
$_.h15 = '{0}={1}' -f $_.h13, $_.h14
}
$_ # output record back to pipeline
} | Export-Csv 'C:\path\to\output.csv' -NoType
。或者,您也可以使用数字(例如h##
)。列数可以从文件的第一行确定:
$headers = 1..20
答案 1 :(得分:0)
其他方法,使用get-content获取brut文件并使用','分隔符
进行拆分$yourpathfile="c:\temp\yourfile.txt"
(get-content $yourpathfile | %{
$row=$_ -split ','
if ($row[14] -eq '1')
{
$result=$row[0..13], ("{0}={1}" -f $row[12], $row[13]) , $row[15.. ($row.Length) ]
}
else
{
$result=$row
}
$result -join ','
}) | Set-Content $yourpathfile