投稿

5月, 2024の投稿を表示しています

grepで大量の条件がある場合の対処方法

記事の更新日:2026/09/30 評価を加筆 1.概要 grepで抽出処理を良く実行します。条件が1個や2個ならば良いのですが、大量の条件がある場合にどうやって実現すると良いか悩みました。forのループで処理できるのはわかるのですが、効率が悪いので方式を検討しました。その内容を記述します。 条件が1つの場合: grep 0001 test.file 条件が2つの場合: grep -e 0001 -e 0002 test.file 条件が多数の場合: grep -e 0001 -e 0002 -e 0003 -e 0004 -e 0005 ... -e 1000 test.file 更に条件が多いと: Argument list too longとなってしまう 私の評価は以下の通りです。 (1) grepで多数の条件設定が必要な場合、grep -f オプションを利用する (2) -f オプションを利用すると正規表現を利用することは難しい (3) その理由は正規表現で冗長となり、メモリ利用料が増加、制限超えと思われる (4) grep以外の手段を利用する。しかし、良い代替品は見つからない 2.詳細 (1) 普通のやり方 forのループを作成して、条件の文字列を作ります( cond.txt )。 条件文字列作成のforのループは文字列を検索しないので効率には影響しません。 -e 0001 -e 0002 -e 0003 -e 0004 -e 0005 ... -e 1000 調べたい対象ファイルをtest.fileとします。 COND=$(cat cond.txt) grep ${COND} test.file (2) grepで非常に大量の条件がある場合の対処方法 実際にgrepで大量のパラメータを設定してみると エラーメッセージが、「Argument list too long」と表示されてしまいます。 調べてみるとエラーの条件が想定したものと異なりました。その内容を記述します。 (a) パラメータが長すぎる STR="-e 100001 -e 100002 -e 100003 -e 100004 -e 100005 ... -e 300000" を作成して、下記grepを実行すると「Argument list too long」のエラーとなりま...

ubuntu/LinuxMintをKVM導入時に標準でBIOS bootパーティションが作成される

 1.概要 改めてKVM環境を調べてみました。KVM環境はパーテイションを1つ作成して導入したのですが、インストール時にインストーラが2つ目のパーティションを作成します。パーティションのタイプがBIOS bootと変わっています。その内容を記述します。 Legacy BIOSを利用して、物理ディスクにUbuntu 20.04を導入する場合、1つのパーティションだけで十分でした。MBRと作成したパーティション( ルート利用 )で導入できました。uefi BIOSに変わってから先頭の2048セクタは利用できず、更に、MBRブート用にboot partition( BIOS boot )が必要になっています。これが、KVM仮想環境にも適用されています。 現時点の仮想環境はLegacy BIOSが基本のようです。uefiBIOS向けに特別な方法を利用して設定する手段はありますが、枯れている技術で問題ないのでしょう。普通のPCも枯れた技術の選択肢を残してほしいものです。 2.詳細 KVM環境に導入したubuntu-24.04のterminalでfdiskで調べると下記2つのパーティションがありました。 /dev/vda1   4096 52426751 52422656  25G Linux filesystem /dev/vda2   2048     4095     2048   1M BIOS boot インストール時に作成したものは/dev/vda1だけです。 /dev/vda2はインストーラが自動作成するノノですが、気になったのはパーティションタイプのBIOS bootです。 fdiskで更にタイプを調べると下記設定でした。 4 BIOS boot fdiskのタイプ一覧を調べると04の設定は、FAT16 <32M となっています。 04 FAT16 <32M /dev/vdaはGPT設定されており、BIOS bootパーティションがbootのために必要なようです。場所は/dev/vda2ですが、ディスクの先頭にアロケーションされています。  MBRからGPTに変更になって一番困ったことはマルチブートの設定...

UbuntuのTerminalで日本語環境の行間を狭くしたい!fonts-takaoで解決する方法 ( ubuntu 22.04 / 24.04 / 26.04 )

記事の更新日: 2026/09/08 1.概要 この記事は2024年が作成日ですが、ubuntu 22.04のpre版を評価した時に気がついていたので2022年頃から悩んでいた問題であり、今でも日本語環境のubuntuを利用する場合は、使い勝手が悪いと感じる部分と思います。必ず、備忘録に残す記事だと思いました。 ubuntu-22.04を試験利用してすぐに気がついたことです。Terminalを開いて、catで/etc/hostsなどを表示すると行間が広く使いにくい。英語環境ではこの問題は発生しません。日本語環境を追加変更すると発生します。この状況はubuntu-24.04やubuntu-26.04でも同じことが起きます。LinuxMintの場合は、LinuxMint 21.3やLinuxMint 22.3の日本語環境で起きません。この内容に関して記述します。 私の評価は以下の通りです。 (1) terminalの行間は日本語を入れない環境では問題ありません (2) 日本語を導入すると行間が広がり、20%弱の表示行数が減少します (3) fonts-takaoはubuntu 20.04まで標準、 fonts-takaoを導入することで問題が改善します 2.詳細 私は、ubuntuとLinuxMintを利用していますが、英語環境でインストールをして、後から日本語を追加導入しています。ubuntu-22.04の試験利用を開始した時に最初に気が付きました。 日本語環境を設定した直後からterminalを利用したときの行間が広くなり表示される行数が減ります 。すぐに、ubuntu-20.04から移行するには難しいと感じました。 私はTerminalを利用してshell programmingを行うためにvimで作業をします。Terminalは列設定を100、行設定を50にして、50行のコードを参照して作業をしています。しかし、日本語導入後、行間が広がり数行減ってしまいます。参照できる行数範囲が狭くなることが作業効率に影響するとは思っていませんでした。 Terminalの行間が広がってしまうことは、UbuntuOneへReportへ以前要望を出しました。しかし、有望な返事は来ていません。諦めて英語環境で作業をしていた時に、ネットでこの事象を検索して情報を見つけました。 フォント...