Search code examples
powershellpowershell-2.0powershell-3.0powershell-4.0

Split strings into multiple columns in PowerShell


I have data in a one column in a CSV file that looks like this:

backup:x:34:34:backup:/var/backups:/usr/sbin/nologin

I want to split it into multiple columns, splitting each value using colon symbol(:) delimiter and add customize headers. Output should look like this:

USERNAME   X   UID   GID   DESCRIPTION  HOMEDIR      SHELL 
----------
backup     x   34    34    backup      /var/backups  /usr/sbin/nologin

Thank you in advance.


Solution

  • The string value backup:x:34:34:backup:/var/backups:/usr/sbin/nologin can itself be thought of as a CSV record with : as delimiters, so you can use ConvertFrom-Csv:

    PS ~> $string = 'backup:x:34:34:backup:/var/backups:/usr/sbin/nologin'
    PS ~> $string |ConvertFrom-Csv -Delimiter ':' -Header USERNAME,X,UID,GID,DESCRIPTION,HOMEDIR,SHELL |Format-Table
    
    USERNAME X UID GID DESCRIPTION HOMEDIR      SHELL
    -------- - --- --- ----------- -------      -----
    backup   x 34  34  backup      /var/backups /usr/sbin/nologin