複数の区切り文字でファイルをソートする方法は?

複数の区切り文字でファイルをソートする方法は?

openSUSEで利用可能なパッチを一覧表示すると、次の出力が生成されます。

次の詳細を生成するコマンドはですzypper patches。コマンドを実行しても同じ結果が表示されます。zypper list-patches -a

Loading repository data...
Reading installed packages...
Repository                        | Name               | Category    | Severity  | Interactive | Status     | Summary                                                                                           
----------------------------------+--------------------+-------------+-----------+-------------+------------+---------------------------------------------------------------------------------------------------
openSUSE-Leap-15.0-Update         | openSUSE-2018-1000 | recommended | moderate  | ---         | not needed | Recommended update for gnuhealth, proteus, tryton, trytond, trytond_purchase, trytond_stock_supply
openSUSE-Leap-15.0-Update         | openSUSE-2018-1004 | security    | low       | ---         | not needed | Security update for ffmpeg-4                                                                      
openSUSE-Leap-15.0-Update         | openSUSE-2018-1005 | security    | moderate  | ---         | not needed | Security update for chromium                                                                      
openSUSE-Leap-15.0-Update         | openSUSE-2018-1006 | security    | moderate  | ---         | applied    | Security update for okular                                                                        
openSUSE-Leap-15.0-Update         | openSUSE-2018-1007 | recommended | moderate  | ---         | applied    | Recommended update for tigervnc     

たとえば、コマンドを使用して「状態」をソートしようとすると、sort -k 6,6 listing.txt | less次のような出力が生成されます。

----------------------------------+--------------------+-------------+-----------+-------------+------------+---------------------------------------------------------------------------------------------------
Loading repository data...
Reading installed packages...
openSUSE-Leap-15.0-Update-Non-Oss | openSUSE-2018-1082 | recommended | moderate  | ---         | not needed | Security update for opera                                                                         
openSUSE-Leap-15.0-Update-Non-Oss | openSUSE-2018-1240 | recommended | moderate  | ---         | not needed | Recommended update for opera                                                                      
openSUSE-Leap-15.0-Update-Non-Oss | openSUSE-2018-1294 | recommended | low       | ---         | not needed | Recommended update for Regina-REXX, THE, ooRexx                                                   
openSUSE-Leap-15.0-Update         | openSUSE-2018-1000 | recommended | moderate  | ---         | not needed | Recommended update for gnuhealth, proteus, tryton, trytond, trytond_purchase, trytond_stock_supply
openSUSE-Leap-15.0-Update         | openSUSE-2018-1007 | recommended | moderate  | ---         | applied    | Recommended update for tigervnc    
Repository                        | Name               | Category    | Severity  | Interactive | Status     | Summary                   

区切り文字がスペースとタブの組み合わせであることを確認するために、vimで構文強調ルールを使用した場合はスペースのみを返します。

:syntax on
:set syntax=whitespace 

ここに画像の説明を入力してください。

ファイルが複数の区切り文字を使用しているようです。

  • 使用する区切り文字を決定する最も効率的な方法は何ですか?
  • 使用された区切り文字に基づいて列をソートするための最良かつ簡単な方法は何ですか?

ベストアンサー1

ヘッダーをそのまま残したい場合を除き、これはうまくいきます。

tail -n +5 listing.txt | sort -b -k6 -t'|'

ファイルでスペースを頻繁に使用する場合(つまり、合計を混在させない場合)(「前のスペースを無視」)-bオプションを省略できます。sort| applied| applied

しかし、私はa)プログラムにマシンが読める形式で書式設定するいくつかのオプションがあり、b)例えば使用する方が良いと思います。awk -F'|' '$6~/not needed/'変えるsort

おすすめ記事