Для одного файла:
datamash -W transpose < input.txt | sed 's/0\t0/9\t9/' | datamash transpose
Для многих файлов сделайте то же самое в цикле:
for i in *; do datamash -W transpose < "$i" |
sed 's/0\t0/9\t9/' |
datamash transpose > "new_$i"; done
Этот цикл создаст новый, измененный файл для каждого файла с добавленным префиксом «новый _». Затем вы можете удалить все старые файлы и удалить префикс «новые _» из имен файлов.
Это решение для одного файла, для нескольких файлов используйте цикл, как и в предыдущем варианте.
tr '\n' '\t' < input.txt |
awk '{
num = NF / 2;
for(up = 1; up <= NF; up++) {
if(up <= num) {
low = num + up;
if(!$up && !$low) {
$up = 9;
$low = 9;
}
}
printf "%s\t", $up;
if(up % num == 0)
print "";
}
}'
Пояснение
tr '\n' '\t' < input.txt
-соединить две строки вместе. awk
Вход
1 0 0 0 0 0 0 0 0 0 1 2 1
0 0 0 0 0 0 0 0 0 0 0 0 0
Выход
1 9 9 9 9 9 9 9 9 9 1 2 1
0 9 9 9 9 9 9 9 9 9 0 0 0
Получается, что мое предположение о неправильной маршрутизации оказалось верным. Вот как я решил эту проблему, используя только systemd -networkd и radvd, хотя, на мой вкус, требуется много ручной настройки:
На pi добавьте в конфигурацию следующие вещи:
Сделать ответ pi на запросы соседей по IP компьютера:
eth0.network (Connected to the internet)
IPv6ProxyNDP=true
IPv6ProxyNDPAddress=2001:...:5bbf
Заставляет Pi перенаправлять весь трафик для компьютера на локальный IPv6-адрес компьютера.:
eth1.network (connected to pc)
[Route]
Destination=2001:...:5bbf
Gateway=fe80:...:d60f
Заставляет устройства, получающие IP-адрес, перенаправлять весь трафик для глобального IP-адреса Pi через локальный IP-адрес Pi:
radvd.conf
interface eth1
{
AdvSendAdvert on;
prefix 2001:...::/64
{
AdvOnLink on;
AdvAutonomous on;
};
route 2001:...::/64{};
};
Пока адреса ipv6 не меняются, у меня это работает. Я не нашел решения для изменения этих адресов без ручной настройки файлов, но, по крайней мере, это что-то.