ターミナル上で「n~mまでの列を出力」といった処理をする場合、個人的には以下のようにawkで処理をする場合が多かった。

awk '{for(i=n;i<=m;i++){a=a" "$i}gsub("^ ","",a);print a}'
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | awk '{for(i=3;i<=8;i++){a=a" "$i}gsub("^ ","",a);print a}'
03 04 05 06 07 08

ただやはりこれだと長くてわかりにくいため、もうちょっと短く書けないかなと調べてみたので、備忘として残しておくことにする。

1. cutコマンドを使う

出落ち感あるけど、そもそもcutコマンド使えばいいじゃないかという。 これが一番シンプルで分かりやすくて短い。

cut -d' ' -f n-m # -dでデリミタを指定している
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | cut -d' ' -f3-8
03 04 05 06 07 08

2. 無理やりブレース展開を利用する

awk内ではブレース展開は利用できないのだが、bashでブレース展開を使って処理コードを生成してevalで実行させることで無理やりブレース展開を使うこともできる。

eval awk "'{print" \${n..m}\, "_ }'"
[root@BS-PUB-CENT7-01 ~]# echo {01..10} | eval awk "'{print" \${3..8}\, "_ }'"
03 04 05 06 07 08