ターミナル上で「n列目~m列目までの範囲を出力」といった処理を短めに行う
Pocket

ターミナル上で「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
Sponsored Links

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

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*