awkを使用して、#の2番目の列と残りのテキストを印刷します。

awkを使用して、#の2番目の列と残りのテキストを印刷します。

私の設定ファイルには次の行があります。

bindsym $mod+F2 exec gnome-terminal #Open terminal 
bindsym $mod+p exec command /some/path"  #Popup Dictionary  
bindsym $mod+Mod1+l exec --no-startup-id /some/path/command #Dmenu for my books collection
bindsym Mod1+Control+b exec rxvt -e nnn #nnn file browser

awk2番目の列もリスト#したいですawk

awk '/bindsym/{print $2}' filename

それを取得する方法がわからない#
好ましい出力は、キーの後にコメントテキストが続くことです。

$mod+F2 Open terminal 

ベストアンサー1

$ awk -v OFS='\t' '/^bindsym/ { key = $2; sub(".*#", ""); print key, $0 }' file
$mod+F2 Open terminal
$mod+p  Popup Dictionary
$mod+Mod1+l     Dmenu for my books collection
Mod1+Control+b  nnn file browser

awkこれは最初に各行の2番目のフィールドをbindsym変数として抽出するために使用されますkey。次に、#その行(対応する行を含む)の前のすべての項目を削除し、keyタブを区切り文字として使用して行の残りの部分を印刷します。

代替出力形式:

$ awk '/^bindsym/ { key = $2; sub(".*#", ""); printf("%-20s\t%-20s\n", key, $0) }' file
$mod+F2                 Open terminal
$mod+p                  Popup Dictionary
$mod+Mod1+l             Dmenu for my books collection
Mod1+Control+b          nnn file browser

ロジックは同じですが、出力では2つの(左揃え)フィールドのそれぞれに20文字を割り当て、それらの間にタブ文字を配置します(良い測定のため)。

おすすめ記事