这是关于主机文件的。
输入:
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'
答案2
你可以试试这个:
echo "$INPUT" | awk '{ for (i = 1; i < NF; i++) { if ($i ~ /#/) { pos = i; break; } } } { for (i = 3; i < pos; i++) s = s";"$i; print $(NF-3)";"$2";"$1";"$(NF-2)";"$(NF-1)s }'