• 締切済み

powershellでのテキスト整形

Powershellで、以下のデータ(CSVファイル)を読み込み、"Data"の値が変わるときに 改行を入れてテキスト出力したいですが、可能でしょうか? (Data毎に区切り(改行)をいれ、視覚的に見やすくしたいのが目的です) CSVファイル Data Name ---- ----- Data1 file1.txt Data1 file1.txt Data2 file1.txt Data2 file1.txt Data2 file3.txt Data2 file1.txt Data3 file3.txt Data3 file3.txt Data3 file2.txt Data3 file2.txt 出力テキスト Data Name ---- ----- Data1 file1.txt Data1 file1.txt Data2 file1.txt Data2 file1.txt Data2 file3.txt Data2 file1.txt Data3 file3.txt Data3 file3.txt Data3 file2.txt Data3 file2.txt 以上、よろしくお願いします。

みんなの回答

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

最初に余分な改行が出力されるので取り除いてください $CSV=@" Data Name ---- ----- Data1 file1.txt Data1 file1.txt Data2 file1.txt Data2 file1.txt Data2 file3.txt Data2 file1.txt Data3 file3.txt Data3 file3.txt Data3 file2.txt Data3 file2.txt "@ -split "`r`n" $old="" $CSV|%{ $line=$_ $data=$_ -replace "(.*) .*",'$1' if ( $data -ne $old ){ $old=$data "" } $line }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Powershellで外部テキストファイルより

    まだまだPowershellの初心者で勉強中です。よろしくお願いします。 下記のような記述がしてある『applist.txt』というテキストファイルがあります。 ホスト名  チーム名 abc123  ponpon666 12def456  gekogeko777 ghi78912  fufufu888 Powershellで、まず端末のホスト名を取得し、その値と、上記の『C:\share』というフォルダの中にあるテキストのホスト名と一致した行にある値を表示したいのです。 外部テキストは、他の作業でも使用するため編集はできません。 作ってみたものは、   $result = ipconfig /all $hostname = $result[6].split(":")[1].Trim()  Select-String $hostname -Path C:\share\applist.txt  として、  ホスト名がghi78912という名前のPCのPowershell ISEで実行したところ  C:\share\applist.txt:3:ghi78912 fufufu888 と1行分が出てしまいます。 これをチーム名のfufufu888だけが取得できるようにするには、どのようにすると良いのか、教えていただけませんでしょうか。

  • powershellでの改行方法について

    テキストファイルの特定の文字列の後の改行コードをカンマに変換するbatファイルを作成しようと思っているのですがうまくいきません。 DOSで用意されているコマンドだけでは実現は難しいと思って、powershellコマンドを使っています。 実現は一つのbatファイルで行いたいのですが、どなたか実現方法を知っていましたら教えていただけませんでしょうか。 [JIKKO.bat] powershell.exe "$(Get-Content TEST.txt) -replace '★`n',','" >TEST_RESULT.txt [TEST.txt] あああ,いいい,ううう★ えええ かかか,ききき,くくく★ けけけ [TEST_RESULT.txtの理想] あああ,いいい,ううう,えええ かかか,ききき,くくく,けけけ

  • powershellでのソート

    powershellでのソート処理に関して教えてください。 list.csv F1,F2,F3 file01.txt,c:\dirA,100kb file20.txt,c:\dirC,100kb file100.txt,c:\dirG,100kb file200.txt,c:\dirG,100kb CSVで上記の様なデータがあり、F1のデータにおいて、 ファイル名の数字部分でソートしたいのですが、 意図したソートができません。 数字を考慮してのソートってどうやればよいでしょうか。 PS c:\>Get-Content .\list.csv|ConvertFrom-CSV |Sort-Object f1 F1 F2 F3 -- -- -- file01.txt c:\dirA 100kb file100.txt c:\dirG 100kb file20.txt c:\dirC 100kb file200.txt c:\dirG 100kb file01.txt→file02.txt→file100.txt→file200.txtの並びでソートさせたいです。 よろしくお願いします。

  • セル内改行をそんままテキスト出力するには?

    セル内で「Alt」+「Enter」で改行されたデータを VBAでテキストファイル(*.txt)に出力したいのですが、 そのままだと、セルの内容が1行になってしまいます。 どのようにすれば、セルで改行したようにテキスト内で改行できるのでしょうか?

  • PowerShellについて

    PowerShellについて 以下の構文ですが、これは、Cドライブ配下のフォルダを取得し、 アクセス権を取得しCSVに吐き出す処理のようですが、このCSVは どこにはきだされるのでしょうか? ? Cドライブで実行してみましたが、何もファイルが作られていないようです。 Get-ChildItem c:\ -Recurse | Get-ACL |Export-Csv c:ACL-List.csv

  • PowershellでExcelの値を取得したい

    PowershellでExcelの値を取得したい こんにちは。Powershellを勉強しています。 Excelを開いて、セルの値を読み取って、合計値を出力したいと思っています。 Excelファイルの A1に10 B1に50 が入力されています。 その上が下記のコードを書きました。 $path = "C:\\Book1.xlsx" $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $TRUE $Book = $Excel.Workbooks.Open($path) $Sheet = $Book.Worksheets.Item("Sheet1") $CellValue1 += $Sheet.Cells.Item(1,1).Text #10が入っている $CellValue2 += $Sheet.Cells.Item(1,2).Text #50が入っている $Values = $CellValue1 + $CellValue2 Write-Host $Values $Book.Close() $Excel.Quit() 実行すると、なぜか CellValue1に「10101010」という値が入ってしまっています。 CellValue2に「5050」という値が入っています。 Write-Host $Valuesを行うと、101010105050 という値が出力されてしまいます。 出力したい結果は「60」なのですが、目的と違った値が出力されてしまうのは何故でしょうか?

  • PowerShellでファイルの連結方法

    PowerShellでファイルの連結をしたいと思っています。 例えば、C:\にa.csv、b.csv、c.csvがあったとします。 Get-Contentを実行すると、問題なくCSVの中身が出力されます。 次に、ネットにあったファイル結合方法を試してました。 Get-Content *.csv > output.csv 実行すると、output.csvに次々とデータが追加されて、ループ状態でどんどん増えていきます。 強制終了で終了させましたが、1回のみファイルの結合をしたいと思いますが、どのようにすればよいでしょうか?

  • PowerShell ファイル連結&出力方法

    PowerShellについてお教え下さい。Cドライブ直下に100のCSVファイルがあります。ヘッダーがある為、全CSVファイルの2行目以降を連結させて1ファイルを作りたいと思っています。 そこで下記のようなスクリプトを書きました。 Get-ChildItem $path | % {Get-Content $_ | Select-Object -Skip 1} > xxx.csv しかし、xxx.csvにデータは出力されるのですが、ループ状態に陥ってしまいファイル容量がどんどん増えていってしまいます。これを解決するにはどのようにしたらよいでしょうか? よろしくお願いします。

  • powershellでフォルダ情報を取得したい

    ■前提・実現したいこと powershellで、カレントフォルダ配下にある多数のフォルダに対し、 フォルダ名、最終更新日時、フォルダ内のjpgファイルの個数、フォルダ内のpngファイルの個数 をカンマ区切りのcsv形式でファイルに保存したいです。 ■試したこと 以下のコマンドで、ファイル名、最終更新日は取得することができました。 Get-ChildItem | Sort-Object Name | Select-Object Name, LastWriteTime | convertTo-csv -delimiter "`t" | Select -Skip 2 | Out-File ../out.txt -encoding Default 1つずつのフォルダに対して以下のコマンドでjpgファイルの個数が取得できるようです。 (Get-ChildItem . | Where-Object { $_.Extension -eq ".jpg" }).Count 最初のコマンドにうまく合わせることで、1コマンドで取得できるようにしたいのですが、 どうすればよいのか分からず、教えていただけないでしょうか。

  • windows powershellのコンソール上で表示されなくなった

    windows powershellのコンソール上で表示されなくなった上部のデータ(文字)を参照する方法はないでしょうか。 powershellであるscriptを実行しました。その結果としてコンソール上に表示された情報(文字)が予想以上に多く、 上部の方がコンソールの表示範囲を超えてしまった為参照できなくなってしまいました。 ※cmd.exeでも同じ状況になっていると思います。 状況の説明が難しいのですが、 コンソールウィンドウのスクロールバーを一番上までもっていっても今回のscriptの実行結果として表示された情報の初めの行までは表示出来ない状態です。 予めコンソールの出力をテキストファイルなどにリダイレクトするようにして実行すれば良かったのですが。。 powershellに標準出力されたデータはどこかにログなど残っているのでしょうか? windows、powershellに詳しい方、ご教授お願い致します。

このQ&Aのポイント
  • アーティストに対するプレゼントの受け入れ条件について誤解があり、処分される可能性があることが判明しました。
  • プレゼントの受け取り方について主催者と事務所の情報に齟齬があり、事務所にお詫びのメールを送るべきか迷っています。
  • アーティストのイベントでのプレゼント受け入れルールについて相談したいです。
回答を見る