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


52

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

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

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

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

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


1
アドバイスとして、の出力を解析しないでくださいls。これは遅かれ早かれあなたを後ろから噛みます。
gniourf_gniourf

awkでは、あなたはちょうどそれらを並べて配置する、2つの文字列を連結するには-print $5 $1
グレンはジャックマン


2
@kenorbと近い投票者、リンクされた複製はまったく複製ではありません。前提(awk {'print $5 $1'} a.txt)でフィールドを印刷する方法をすでに知っています。フィールド#1とフィールド#5の間にスペースを入れる方法を尋ねています。
コス

回答:


73

行を変更するだけです

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 ;

4
このprintf関数は、特に数値をフォーマットする場合に、より優れた制御を提供します。printf("%s\t%s\n", $5, $1)
マクニス

1
上記の答えにタイプミスはありますか?何をん5sで意味awk {'printf ("%5s\t%s\n", $5, $1)'}
ヴィシャル


9

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

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

6

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

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

3
-1:新しいものはありません。gawkmawkなどawk、カンマを使用すると、すべてスペースが挿入されます。これがこの答えです。
ムル14

1
する必要がありますls -la | awk '{print $1, $9}'。ムーが言ったようgawkに、必要はありません。
ニッククロフォード

1

引数の間にスペースを入れるには" "、たとえばを追加しawk {'print $5" "$1'}ます。

しかし、それがされていないために推奨の解析出力lsコマンドそれが信頼性がないと出力は人間ではなく、スクリプトのためであることから、。したがって、findまたはなどの代替コマンドを使用しますstat

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さらにオプションを確認してください。たとえば、変更日を印刷するには、この例をチェックしてください。


OPはスクリプトを実行する目的ではなく、人間が読む目的で出力を解析しようとしているようfor i in ls; do $iです(など)。
mchid
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.