Как сортировать данные 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