AWK Unix命令转换为PowerShell

时间:2017-09-12 21:34:01

标签: powershell awk

我想请求如何将以下行转换为PowerShell命令的帮助。

awk 'BEGIN{OFS=FS=","}$15==1{$15=$13"="$14}{print > "AJB_AWK"}'

我有一个逗号分隔文件(没有标题),我需要做的是检查第15个字段是否为1.如果是,我需要将其转换为第13列“=”第14列的值。我已经做了一项研究,但找不到合适的命令让它发挥作用。

2 个答案:

答案 0 :(得分:1)

您要查找的cmdlet是Import-CsvExport-CsvForEach-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