awkの出力の終わりに入力の「中間」部分をリストします。

awkの出力の終わりに入力の「中間」部分をリストします。

ホストファイルに関する内容です。

入力する:

1.2.3.4 foooo00001 foo001 # AIX bar0003 NOSLS NOSLS NOCOMMENT
2.3.4.1 foooo00002 foo002 fooo0002 # Linux bar0003 NOSLS NOSLS NOCOMMENT

出力:

echo "$INPUT" | awk '{print $(NF-3)";"$2";"$1";"$(NF-2)";"$(NF-1)}'
bar0003;foooo00001;1.2.3.4;NOSLS;NOSLS
bar0003;foooo00002;2.3.4.1;NOSLS;NOSLS

しかし、私たちには次のような出力が必要です。

echo "$INPUT" | awk SOMEMAGIC
bar0003;foooo00001;1.2.3.4;NOSLS;NOSLS;foo001
bar0003;foooo00002;2.3.4.1;NOSLS;NOSLS;foo002;fooo0002

質問:エイリアスを追加するためにawkをどのように変更しますか?

スペースは区切り文字で、エイリアスはホスト名の後に続き、常に「#」で終わります。

ベストアンサー1

気に入ったらawk試してみてください

echo "$INPUT" | \
awk -v OFS=';' '
{for(i=4;$i!="#";i++)
     $3=$3 OFS $i
 print $(NF-3),$2,$1,$(NF-2),$(NF-1),$3}'

GNUでも同じことができますsed

echo "$INPUT" | \
sed -r 's/(\S*)( \S* )(.*) # \S* (\S*)( .* )\S*/\4\2\1\5\3/;s/ /;/g'

おすすめ記事