web-dev-qa-db-ja.com

awkでスペースまたはタブでフィールドを区切る方法

awkで遊んでいる間、私は実行するようになりました:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;

これにより、次のような出力が得られます。

53277-rw-------
52347-rw-------

出力のこれら2人の友人の間にスペースを確保するにはどうすればよいですか?

48
rɑːdʒɑ

行を変更するだけです

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;

これにより、出力がスペースで印刷されます。

お役に立てれば。

編集:

McNisse で示唆されているように、適切な出力形式を提供するprintfを使用できます。

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;
69
devav2

別のawk固有の手法、「出力フィールド区切り記号」を使用

ls -la | awk -v OFS='\t' '{print $5, $1}'

ここではカンマが重要です。

65
glenn jackman

タブを取得する簡単な方法は次のとおりです。

awk {'print $5"\t"$1'}
7
becko

私はこれが古いスレッドであることを知っていますが、私は学習しているだけであり、これらの投稿が役に立つと感じました。私の最善の解決策は、変数の間にスペースを挿入するためにgawkを使用することでした。

ls -la | gawk '{print $1, $9}'
4

引数の間にスペースを入れるには、" "を追加するだけです。 awk {'print $5" "$1'}

ただし、notlsコマンドの出力を解析 に推奨されます。これは信頼性が低く、出力が人間向けであるためです、スクリプトではありません。したがって、findstatなどの代替コマンドを使用してください。

GNU statを使用した例を次に示します。

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

マシンに優しい出力(簡潔な形式)が出力されるため、必要なものを正確に取得できます。次に、-cを使用して特定の形式を使用するか、awkcutまたはreadを使用して正しい列を取得します。

その他のオプションについては、stat --helpを確認してください。たとえば、変更日を出力するには、 この例 をチェックします。

1
kenorb