BEGIN {
OFS = FS = ","
# Parse given column headers and remeber their order.
# nf will be the number of fields we'd want in the output.
nf = split(pick, header)
for (i = 1; i <= nf; ++i)
order[header[i]] = i
# Output headers.
print pick
}
FNR == 1 {
# Parse column headers from input file.
delete reorder
for (i = 1; i <= NF; ++i)
# If the current header is one that we'd like to pick...
if ($i in order)
#... record what column it is located in.
reorder[order[$i]] = i
next
}
{
# Process data fields from input file.
# We build a new output record, so explicitly split the current record
# and save it in the field array, then empty the record and rebuild.
split($0, field)
$0 = ""
for (i = 1; i <= nf; ++i)
# If reorder[i] is zero, it's a column that is not available in the
# current file.
$i = (reorder[i] == 0 ? "" : field[reorder[i]])
print
}
Приведенный выше awk
скрипт будет принимать в качестве аргумента набор столбцов, которые вы хотите (извлечь в определенном порядке ), и будет извлекать их из каждого входного файла.
Примеры с данными, которые вы показываете в вопросе:
$ awk -v pick='A,B,C,D,E,F' -f script.awk file*.csv
A,B,C,D,E,F
10,20,10,20,,5
,20,10,20,5,10
,,,10,30,20
$ awk -v pick='F,B,A' -f script.awk file*.csv
F,B,A
5,20,10
10,20,
20,,
Метод OP возможен, начиная с Linux 2.6.37 , но требует дополнительных настроек.
Эквивалентом IPv6 для ARP является NDP (, который использует многоадресную/одноадресную передачу ICMPv6 вместо выделенного протокола ARP L2 с широковещательной/одноадресной передачей ).
proxy_ndp
не ведет себя точно так же, как Proxy ARP здесь (он по-прежнему требует -настроек IP, которые нам не нужны здесь )и не помогут. Вместо этого выделенный демон с именем ndppd
, который слушает запросы NDP к (, обычно )отвечает от имени других систем, может управлять этим случаем. Он должен быть настроен так, чтобы не пытаться запрашивать внутреннюю систему перед ответом, поскольку другой такой системы не существует.
Предположим здесь, что:
eth0
Включите пакет EPEL (epel-release
), установите ndppd
и используйте конфигурацию, аналогичную этой в/etc/ndppd.conf
:
proxy eth0 {
router no
rule 2001:570:1:b86::/64 {
static
}
}
static
заставляет демона отвечать немедленно, не запрашивая какую-либо внутреннюю систему, что необходимо сделать в этом случае, поскольку все адреса принадлежат (или, точнее, здесь все запросы должны достигать )хоста.
Предостережения:
ndppd
выдаст предупреждение при запуске из-за большой сетевой маски.
Это имеет значение, если системный маршрутизатор не был явно настроен для маршрутизации этого блока /64 через 2001 :570 :1 :b86 ::12 или (намного лучше )через связать локальный адрес на системном интерфейсе eth0
.
Если сканирование сети с удаленного устройства выполняется в блоке без надлежащей настройки маршрутизатора, этот маршрутизатор будет выделять запись NDP для каждого нового адреса, обнаруженного в этом сканировании /64. Небольшие (домашние )маршрутизаторы, не рассчитанные на то, чтобы быть надежными и достаточно быстро удалять старые записи, могут не справиться с этим и перейти в условия нехватки памяти/высокой загрузки ЦП (, то есть:DoS).
поскольку фактический адрес IPv6 хоста находится среди /64, запрос этого адреса вызовет два ответа NDP :один от ядра и один от ndppd
. Если система на самом деле является маршрутизатором, это может вызвать периодические проблемы с маршрутизацией. В таком случае router yes
можно было бы подумать. Конфигурация ndppd
, похоже, не имеет подсети, переопределяющей более крупную сеть, включая эту подсеть, как это произошло бы в таблице маршрутизации.