3

このコマンドがどのように機能するかを理解する必要があります。

awk 'BEGIN{while(a++<30)s=s " "};{sub(/^.{6}/,"&" s)};l' myfile

最初の部分 (BEGIN{} セクションの式) が 30 文字の長さのスペース文字列を作成する方法を理解しています。しかし、2番目の部分(サブ)がわかりません。

subは、最近生成された文字列「s」を「myfile」の 6 列目に追加します。しかし、コマンドを見ると、検索パターン/^.{6}/は 1 文字 (.) で始まり、次に {6} で始まるすべての行を検索し、それらをスペースが追加された文字列に置き換える必要があります。

これをよりよく理解するのを手伝ってもらえますか?

4

2 に答える 2

2

それが何をしているのかについては@BillKarwinの回答を参照してください。より簡潔な方法については、以下の2番目のawkスクリプトを参照してください。

$ cat file
abcdefghi

$ awk 'BEGIN{while(a++<30)s=s " "} {sub(/^.{6}/,"&" s)} 1' file
abcdef                              ghi

$ awk '{printf "%-36s%s\n",substr($0,1,6),substr($0,7)}' file
abcdef                              ghi
于 2013-05-17T20:14:38.770 に答える