Столбцы вставки UNIX и вставляют нули для всех отсутствующих значений

Я не добрался полностью в LXC,

но я имею, устанавливают несколько контейнеров с, там владеют статическим IP в LAN, которые обеспечивают интернет-сервисы для некоторых моих веб-сайтов...

Возможно, это может помочь, на том, что Вы хотите для Вашего.

Я выполняю несколько контейнеров, как так,

НА ХОСТ-МАШИНЕ я Отредактировал Файл Хоста, Добавив Каждую Контейнерную и Хост-машину: vi/etc/hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

после сохранения...

Снова, На хост-машине я установил сеть и мост к:

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

выше сети мой IP маршрутизатора, для LAN. (внутренний) адрес и широковещательная передача являются хост-машиной, внутренним IP, который я позже использую VHOST для доступа в Интернет, веб-серверов, ftp, и т.д.

ДЛЯ КОНТЕЙНЕРОВ LXC 1-4 Я УСТАНАВЛИВАЮ КОНФИГУРАЦИЮ КАК ТАК:

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

теперь Контейнер 1 IP = 192.168.1.101

я повторяюсь, чтобы дополнительные контейнеры имели там собственный статический IP на LAN..

в контейнере 1-4,

войдите в систему от хоста:

lxc-console -n CONTAINERNAME,

И я установил каждую сеть контейнеров на помехи, eth0 к:

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

КАЖДЫЙ ИЗ КОНТЕЙНЕРОВ ИМЕЕТ IT СОБСТВЕННЫЙ IP, (локальный) ДОСТУПНЫЙ НА LAN. ВЫ CAN SSH КАЖДЫЙ ОТДЕЛЬНЫЙ ЛОКАЛЬНЫЙ IP, ДЛЯ ТЕСТИРОВАНИЯ ИСПОЛЬЗУЯ ШПАКЛЕВКУ!

После этого я - вполне уверенный u, должен выяснить, как выполнить их через Интернет после, пример, vhost к контейнерному IP / подсистемы балансировки нагрузки / прокси / и т.д.

Возможно, эта установка может выручить в так или иначе.

5
13.07.2016, 12:42
3 ответа

Если порядок столбцов важен, т.е. номера из одного и того же файла должны храниться в одной колонке, необходимо добавить подкладку при чтении разных файлов. Вот один из способов, который работает с GNU awk:

merge.awk

# Set k to be a shorthand for the key
{ k = $1 SUBSEP $2 }

# First element with this key, add zeros to align it with other rows
!(k in h) {
  for(i=1; i<=ARGIND-1; i++)
    h[k] = h[k] OFS 0 
}

# Remember the data element
{ h[k] = h[k] OFS $3 }

# Before moving to the next file, ensure that all rows are aligned
ENDFILE {
  for(k in h) {
    if(split(h[k], a) < ARGIND)
      h[k] = h[k] OFS 0
  }
}

# Print out the collected data
END {
  for(k in h) {
    split(k, a, SUBSEP)
    print a[1], a[2], h[k]
  }
}

Вот несколько тестовых файлов: f1, f2, f3 и f4:

$ tail -n+1 f[1-4]
==> f1 <==
xyz desc1 21
uvw desc2 22
pqr desc3 23

==> f2 <==
xyz desc1 56
uvw desc2 57

==> f3 <==
xyz desc1 87
uvw desc2 88

==> f4 <==
xyz desc1 11
uvw desc2 12
pqr desc3 13
stw desc1 14
arg desc2 15

Test 1

awk -f merge.awk f[1-4] | column -t

Output:

pqr  desc3  23  0   0   13
uvw  desc2  22  57  88  12
stw  desc1  0   0   0   14
arg  desc2  0   0   0   15
xyz  desc1  21  56  87  11

Test 2

awk -f merge.awk f2 f3 f4 f1 | column -t

Output:

pqr  desc3  0   0   13  23
uvw  desc2  57  88  12  22
stw  desc1  0   0   14  0
arg  desc2  0   0   15  0
xyz  desc1  56  87  11  21

Edit:

Если выход должен быть разделен на закладки, установите разделитель полей вывода соответственно:

awk -f merge.awk OFS='\t' f[1-4]
3
27.01.2020, 20:37
[

] Это немного длинно, но работает:[

] [
$ cat file1 file2 | awk '{a[$1FS$2]=a[$1FS$2]FS$3; b[$1FS$2]++} END {for (i in b) max=max<b[i]?b[i]:max; for (i in a) {printf "%s %s", i, a[i]; for (j=b[i]; j<max; j++) printf "%s0", FS  printf "%s", RS}}' 
pqr desc3  12 0
xyz desc1  12 56
uvw desc2  55 88
] [

]Блок awk может быть отформатирован следующим образом:[

] [
awk '{a[$1FS$2]=a[$1FS$2]FS$3; b[$1FS$2]++}
      END {for (i in b) max=max<b[i]?b[i]:max
          for (i in a) {printf "%s%s%s", i, FS, a[i]
                        for (j=b[i]; j<max; j++) printf "%s0", FS
                        printf "%s", RS}
          }'
] [

]Идея состоит в том, чтобы распечатать все файлы, а затем перехватить повторяющиеся значения в массиве []a[$1 $2][]. Также []b[$1 $2][] содержит количество раз появления пары ([]$1[], []$2[]). [

] [

]В блоке []END{}[] мы продолжаем перебирать значения и заканчиваем с таким количеством []0[]s, которое не хватает от количества элементов до максимального количества элементов.[

].
2
27.01.2020, 20:37

Попробуйте:

$ awk '
    FNR == NR { a[$1,$2] = $3; next }
    {
        print $0,(($1,$2) in a) ? a[$1,$2] : "0"
    }
' file2 file1
xyz   desc1   12 56
uvw   desc2   55 88
pqr   desc3   12 0
2
27.01.2020, 20:37

Теги

Похожие вопросы