Как сортировать данные CSV с помощью Powershell?

Когда CSVфайл загружается, как показано ниже, как затем сортируются данные?

      PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> $words = Import-Csv -Path ./sort.csv
PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> $words                              

symbol code word  morse code phonetic
------ ---------  ---------- --------
A      Alfa/Alpha ● ▬        AL FAH
B      Bravo      ▬ ● ● ●    BRAH VOH
C      Charlie    ▬ ● ▬ ●    CHAR LEE
D      Delta      ▬ ● ●      DELL TAH
E      Echo       .●         ECK OH
F      Foxtrot    ● ● ▬ ●    FOKS TROT
G      Golf       ▬ ▬ ●      GOLF
Z      Zulu       ▬ ▬ ▬ ▬ ▬  ZOO LOO
H      Hotel      ● ● ● ●    HOH TELL
I      India      ● ●        IN DEE AH
J      Juliett    ● ▬ ▬ ▬    JEW LEE ETT
K      Kilo       ▬ ● ▬      KEY LOH
L      Lima       ● ▬ ● ●    LEE MAH
M      Mike       ▬ ▬        MIKE
N      November   ▬ ●        NO VEMBER
O      Oscar      ▬ ▬ ▬      OSS CAH
I      India      ● ●        IN DEE AH
P      Papa       ● ▬ ▬ ●    PAH PAH
Q      Quebec     ▬ ▬ ● ▬    KEH BECK
S      Sierra     ● ● ●      SEE AIRRAH
R      Romeo      ● ▬ ●      ROW ME OH
T      Tango      ▬          TANG OH
U      Uniform    ● ● ▬      YOU NEE FORM
V      Victor     ● ● ● ▬    VIK TAH
W      Whiskey    ● ▬ ▬      WISS KEY
X      X-ray      ▬ ● ● ▬    ECKS RAY
Y      Yankee     ▬ ▬ ● ●    YANG KEY
Z      Zulu       ▬ ▬ ▬ ▬ ▬  ZOO LOO

PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> $words | sort 'code word'           
/usr/bin/sort: cannot read: 'code word': No such file or directory
PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> sort $words              
/usr/bin/sort: cannot read: '@{symbol=A; code word=Alfa/Alpha; morse code=● ▬; phonetic=AL FAH}': No such file or directory
PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> help sort
PS /home/nicholas/powershell/csv>              

смотрите также:

https://devblogs.microsoft.com/scripting/use-powershell-to-sort-csv-files-in-order/

который имеет аналогичные примеры, за исключением того, что данные сортируются по мере их импорта.


исходные данные как:

      nicholas@mordor:~/powershell/csv$ 
nicholas@mordor:~/powershell/csv$ head sort.csv 
symbol,code word,morse code,phonetic
A,Alfa/Alpha,● ▬,AL FAH
B,Bravo,▬ ● ● ●,BRAH VOH
C,Charlie,▬ ● ▬ ●,CHAR LEE
D,Delta,▬ ● ●,DELL TAH
E,Echo,.●,ECK OH
F,Foxtrot,● ● ▬ ●,FOKS TROT
G,Golf,▬ ▬ ●,GOLF
Z,Zulu,▬ ▬ ▬ ▬ ▬,ZOO LOO
H,Hotel,● ● ● ●,HOH TELL
nicholas@mordor:~/powershell/csv$ 

который был скопирован/вставлен с веб-сайта.


получить участников показывает:

      PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> $words = Import-Csv -Path ./sort.csv
PS /home/nicholas/powershell/csv> 
PS /home/nicholas/powershell/csv> $words | Get-Member                 

   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
code word   NoteProperty string code word=Alfa/Alpha
morse code  NoteProperty string morse code=● ▬
phonetic    NoteProperty string phonetic=AL FAH
symbol      NoteProperty string symbol=A

PS /home/nicholas/powershell/csv> 

что, как и ожидалось.

1 ответ

является внешней командой (приложением) в системах Linux.
Другими словами, не используйте короткое имя ( ), но полное имя командлета Sort-Object:

      $Words |Sort-Object 'code word'

Как прокомментировал user9132707, подробности о приоритете команд можно найти в about_Command_Precedence . Чтение этого может на самом деле показаться запутанным, поскольку процесс определен в следующем порядке: Alias, Function, Cmdlet, any external command/script(что должно дать псевдониму приоритет над внешней командой ).
По-видимому, псевдоним просто не установлен в системах Linux (предположительно, чтобы предотвратить его отмену внешней собственной команды Linux):

Окна (10)

      Get-Command sort

CommandType     Name                                       Version    Source
-----------     ----                                       -------    ------
Alias           sort -> Sort-Object

Linux (ОС Пи)

      Get-Command sort

CommandType     Name                                       Version    Source
-----------     ----                                       -------    ------
Application     sort                                       0.0.0.0    /usr/bin/sort

Это означает, что вы также можете решить эту проблему, вручную отменив внешнюю команду с помощью sortпсевдоним:

      Set-Alias sort Sort-Object
Другие вопросы по тегам