つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

PowerShellコマンドレットのパラメータ名の省略形

 コマンドラインシェル PowerShell のことを勉強するため、1冊の解説書を購入しました。
 五十嵐 貴之 著
  「動くサンプルで学べる Windows PowerShell コマンド&スクリプティングガイド」 です。

PowerShell PC

 さっそく、PowerShell でファイルやフォルダを新規作成するコマンドレット New-Item についての解説部分を読みました。
 New-Itemで作成する項目がファイルなのかフォルダなのかを指定するパラメータ名は、-ItemType です。
 ファイル作成では、New-Item -ItemType "File" と記述し、
 フォルダ作成では、New-Item -ItemType "Directory" と記述します。
 ところが、上記書籍では、ファイル作成のパラメータ名は「-ItemType」としているのに対し、フォルダ作成のパラメータ名は、単に「-Type」としています。
 まさか、ファイル作成とフォルダ作成とで、パラメータ名が違うはずはありません。「これは記述ミスではないだろうか。」って思いました。
 んで、ヘルプを出してみました。そうたら、両方ともパラメータ名は、「-ItemType」となっています。ほぉら、やっぱり。
 こういうのは、実地で確かめる必要があります。コマンドラインに -Type と記述し、実地で試してみました。そうすると、-Type と記述してもエラーとなることなく、うまく実行されます。
 あれれぇ?
 これ、いったい、どゆこと?
 調べてみると、パラメータ名は、 -Type でもよいことが分かりました。
 その理屈は、パラメータ名の省略形に関するPowerShellの仕様です。PowerShell では、パラメータ名を一意に識別できる範囲ならば、つまり他のパラメータ名と区別できる限度でならば、省略形の記述可能の仕様となっているのです。
 -Type は -ItemType の一部分ではありますが、他に Type で始まるパラメータが存在しないため、これで一意に識別できます。ですから、-Type は -ItemType の省略形として通用するわけです。
 へぇぇ、知らんかった。これでまた、一つ賢くなりました。

 それではまた次の記事で。
   goosyun

LinuxにインストールしたPowerShellでGUIダイアログを表示

 先日から、コマンドラインシェルのPowerShellを少しずつ、触っています。本格的にその操作法を習得するっていうものではなく、表面をかじるっていう程度ですが。
 コマンドラインインターフェースでいろんな操作ができるので、なかなか魅力的です。
 そして、PowerShellでは、なんとWindowsフォームを扱えるようです。フォームを作成し、そのフォーム上に、テキストボックスや、ラベル、コマンドボタンなどを配置することができるようです。これは、GUI環境を実装できるってぇことです。これが使えると、格段に便利です。
 これって、もしかしたら、Windows環境のPowerShellばかりでなく、UbuntuZorin OS にインストールしたPowerShellでもできるってことじゃないだろうかと、ちょっと期待してしまいました。

PowerShellとタックス

 んで調べてみました。そしたら、Linux環境でのPowerShellでは、メッセージボックスやフォームは扱えないようです。理由は、System.Windows.Forms は Windows 専用の GUI ライブラリであり、Linux では動作しないため・・・、のようです。あぁ、残念。
 ただ、その代替手段があるようです。
 Zenityというツールです。このツールを使うと、Windowsフォームの代替として、GUI ダイアログを出せるようです。
 このツール、わざわざインストールしなくても、通常は、Ubuntu や Zorin OS に最初から入っているとのことです。確かめてみると、確かにZorin OS にインストールされていました。
 Zorin OS で次のコマンドの実行すると、思いどおりのダイアログが表示されました。
   zenity --info --text="ほげほげ"
 ただ、それに併せて、次のメッセージも出てきます。

Gsk-Message: 11:34:54.264: Failed to realize renderer of type 'GskNglRenderer' for surface 'GdkWaylandToplevel': OpenGL ES 3.0 はこのレンダラーではサポートされていません。
 よく分からないのですが、ダイアログ描画の動作に影響しないので気にしなくてよい、・・・というか、無視するしかないメッセージのようです。

 これから、気が向いたら、PowerShellのことも少しは勉強してみます。

 それではまた次の記事で。
  goosyun

awkのsub()関数の第1引数正規表現の書き方

 テキストデータなどを処理するプログラミング言語awkでは、sub()gsub()は、文字列置換の関数です。
 sub(置換対象正規表現,置換後文字列,入力文字列)
という書き方をします(第3引数省略では、$0となります。)。
 これで、第1引数の正規表現にマッチする文字列が、第2引数の文字列で置換されます。
  例えば、次の記述をして実行すると、aiuEo と出力されます。
  $ echo "aiueo" | awk '{sub(/e/,"E");print}'

花見のタックス

 data.txtという名前のテキストファイルに、次のようなデータが入力されています。
  1 太郎
  2 二郎
  3 三郎
  4 四郎
  5 五郎
 上記データの第2フィールドの値すべてに「_さん」という文字列を付け加えようと、次の記述をして実行しました。
 $ awk '{sub(/$2/,"&_さん");print}' data.txt
 ところが、これだと置換が行われません。ですから、元データがそのまんま出力されるだけです。
 最初は原因が分からず、「ん?」ってなりました。間違っていたのは、sub()関数の第1引数の書き方です。
 正規表現ならば、すべてスラッシュ(/)で囲む必要があると思い込み、スラッシュを付けたのが誤りです。リテラルならばスラッシュで囲みますが、変数ならばスラッシュは不要です。/$2/の書き方をすると、$2という文字列が置換対象となります。文字列$2は存在しないので、置換は行われません。
 正しい記述は、次のとおりです。 
 $ awk '{sub($2,"&_さん");print}' data.txt
 これを実行すると、1 太郎_さん 2 二郎_さん 3 三郎_さん・・・と、意図どおりの出力がされます。
 awkで正規表現パターンを記述するのに、リテラルはスラッシュで囲む、変数にはスラッシュが不要、というのは次の場合も同じです(data.txtは上掲に同じとする。)。
 awk -v hensu="四" '$2 ~ hensu' data.txt
 これを、awk -v hensu="四" '$2 ~ /hensu/' data.txt  とすれば誤りとなります。

 それではまた次の記事で。
   goosyun

格安中古のPC用メモリの増設

 PC用メモリやSSDの価格が高騰しています。そんな状況にあって、ノートPC用メモリの中古品が格安で手に入りました。
 DDR3規格の4GB×2枚、計8GBです。手に入れたはいいけれども、さてこれをどうしようか、と思っていたら・・・。
 Zorin OS をインストールしているノートPCは、調べてみたら8GBまでメモリ搭載可能と分かりました。最大4GBまで、と理解していたのは勘違いでした。これはラッキーです。Zorin OS はあまりスペックを要求しない軽いOSなので、現状の4GBでも十分ですが、この際せっかくなので、メモリ換装、増設をすることにしました。

桜風景の画面PC

 作業はごくごく簡単です。PCの裏ブタを開いて、交換するだけです。
 作業後に、動作状況を確認するために、ターミナルに次のコマンドを打ち込みました。
   sudo dmidecode -t memory
 そうすると、メモリ4GBしか認識されていません。つまり、2枚のうちの1枚のメモリが認識されていません。
 あれれ、やっぱり格安中古のメモリだから、1枚は動作不良品だったかもな・・・、と。
 仕方なく、もう一度裏ブタを開いてメモリを抜き取り、接点部分を綿棒でゴシゴシ掃除しました。その上で、2枚のメモリを、上下スロット入れ替えて装着しました。
 そうしたら、今度はバッチリ。2枚合計、8GBを認識してくれました。おぉ、2枚ともに正常だったかと、一安心です。
 ホコリの付着などによる接触不良だったか、あるいは、きちんと奥まで差し込めていなかったかの、どちらかだろうと思われます。
 動作不良品を買ってしまったかと、一時は落胆しましたが、2枚とも動作品で何よりでした。

 それではまた次の記事で
   goosyun

ZorinOSにPowerShellをインストール

 Microsoft製のコマンドラインシェルPowerShellの魅力は、コマンドの実行でオブジェクトが出力される点です。パイプでのやり取りもオブジェクトで行われます。オブジェクトが持っている各種プロパティを利用すれば、いろんな操作が可能となります。この点が、何もかもテキストとして扱うLinuxにないメリットです。何気なく触ってみたPowerShellですが、そこにおもしろみを感じ始めています。そのPowerShellは、Microsoft製ながら、2016年にオープンソース化され、PowerShell 6.0以降は、Linux、macOS、Windowsで動作するクロスプラットフォームのコマンドラインシェルとなりました。

 そこで、Zorin OS PCの有効活用のために、同PCにPowerShellをインストールすることにしました。
 Zorin OS 18 は Ubuntu 24.04 をベースにしたOSだから、Ubuntu と同じdebパッケージ版の PowerShell を使うことができます。ちなみに、Zorin OS 18 は、snap版を非推奨としているようなので、使えなくもないのですが、今回はsnap版は避けました。Zorin OS には、Ubuntu と同じ手順でインストールできるdeb版が最適というわけです。それによって、パッケージ管理も apt で統一できますし。
 さて、問題は Ubuntu 24.04用の PowerShell(deb版)が、Microsoft公式リポジトリに存在するかです。その点が不安でした。
 んがぁ、調べてみたら、Ubuntu 24.04用のdeb版PowerShellが公式リポジトリにしっかり用意されていました。しかも、Ubuntu 24.04(=Zorin OS 18)への PowerShell のインストール手順まで公開されていました。
 ここまで分かれば、手順に従ってインストール作業ができます。

Zorin OS パソコン

 インストールの手順は次のとおりです。
1. Microsoft リポジトリを追加
【Bash】
 wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb
 sudo dpkg -i packages-microsoft-prod.deb
 ※「ubuntu 24.04」と記述されているとおり、上記のリポジトリURLは Ubuntu 24.04用です。
2. パッケージ情報更新・PowerShellインストール
【Bash】
 sudo apt update
 sudo apt install -y powershell
3.起動
【Bash】
 pwsh
4.インストール後の確認
【PowerShell】
 $PSVersionTable


 以上の手順で、トラブルの発生もなく、すんなりとインストールが完了しました。
 これによって、これからはZorin OS の操作にPowerShellも活用できるようになりました。いろいろと楽しく遊べます。初老のおっさんにとって、いいボケ防止のおもちゃです。

 それではまた次の記事で。
   goosyun

空白行を取り除くawkプログラム

プログラミング中のワンころ

  awk 'NF' data.txt
 たったこれだけのコードで、空白行混じりのテキストファイルから空白行を取り除くことができます。
 なぜ awk 'NF' で空白行が削除されるか、そのからくりについては、昨日(2026年3月16日)付けの記事をご覧ください。
   ⇒ 「ごく短い空白行削除awkプログラム」
 なお、
  awk '$0' data.txt
 としても同じような処理ができます。
 ただ、awk '$0' data.txt 方式だと、改行コードだけ入力された空白行は削除されるけれども、スペース(空白)が入力された空白行は削除されません。スペース入力行は、$0が 空文字列("")ではないからです。
 たいていの場合、スペースのみが入った行はデータがないのだから、改行コードのみの行と同じように削除対象としたいはずです。
 そうならば、一般的には awk '$0' ではなく、awk 'NF'とするのがよいとなります。
 それにしても、awk 'NF'とたったこれだけで、どんなに膨大な行数のテキストファイルであっても、すべての空白行が取り除かれるのだから、感心してしまいます。
 それではまた次の記事で。

   goosyun

ごく短い空白行削除awkプログラム

 あるところで、とてもおもしろいawkプログラムを見かけました。次のコードです。
   $ awk 'NF' data.txt
 コードとしてはたったこれだけです。ごくごく短いプログラムです。
 これがどういう動きをするのか、想像つきますか?
 実はこれは、data.txt から空白行を取り除いて、データだけを出力してくれるプログラムです。
 data.txt は、下図のように入力された、空白行混じりのテキストファイルです。

データが入力されたテキストファイル data.txt

 上記テキストファイルを対象にして、$ awk 'NF' data.txt を実行すると、空白行が取り除かれて、次のように出力されます。

awk 'NF' の実行結果
  1 hagehage 1234 gaasyun
  2 higehige 2345 giisyun
  3 hugehuge 3456 guusyun
  4 hegehege 4567 geesyun
  5 hogehoge 5678 goosyun

 awk のプログラムは、'パターン{アクション}' という形で記述します。このパターンには式を記述できます。そして、その式の結果が、数値の0か空文字の場合、awkはと評価します(数値の非ゼロ非空文字だと、と評価)。
 空白行はフィールドが一つもないので、組み込み変数 NF は「0(ゼロ)」です。よって、偽と評価され、その行に対しては、アクション print $0 が実行されません。逆に、空白行でない限り、NF は非ゼロだから、print $0 が実行されます。
 この結果、 awk 'NF' という記述だけで空白行が取り除かれ、データだけ出力されます。ねっ、おもしろいですよね。

 それではまた次の記事で。
   goosyun