複数フィールドの印刷

複数フィールドの印刷

1行のコマンドで複数のフィールドを印刷する方法はありますか?

$ 3を$ NFで印刷したいです。次のようにできます。

awk -F[:] '{print $3,$4,$5 .... $NF}'

しかし、これはフィールド数が多い場合には適しておらず、エラーが発生しやすい。

ベストアンサー1

私が知っている唯一の方法は、各フィールドを繰り返すことです。

$ echo "a:b:c:d:e:f:g:h:i" | 
    awk -F":" '{for(i=3;i<=NF-1;i++){printf "%s ", $i}print $NF}'
c d e f g h i

または、以下を使用することもできますperl

$ echo "a:b:c:d:e:f:g:h:i" | perl -F":" -lane 'print "@F[2..$#F]"'
c d e f g h i

またはcut:

$ echo "a:b:c:d:e:f:g:h:i" | cut -d: -f3- 
c:d:e:f:g:h:i

またはsed:

$ echo "a:b:c:d:e:f:g:h:i" | sed 's/\([^:]*:\)\{2\}//'
c:d:e:f:g:h:i

おすすめ記事