Как открыть и прочитать символьное устройство как двоичный файл?

Предполагая, что у вас одинаковое количество места в столбцах 1 и 3, вы можете использовать

awk -F '|' -v OFS='|' '$1==$3 { for(i = 3; i < NF-1; i++) $i = $(i+2); NF -= 2 } { print }' sample.txt

Пояснение:

-F '|' -v OFS='|'установить разделители полей ввода и вывода
$1 == $3условие :столбцы 1 и 3 равны
for(i = 3; i < NF-1; i++) $i = $(i+2);начиная со столбца 3, переместить значения на 2 столбца вперед
NF -= 2уменьшить количество столбцов
{ print }безусловно напечатать строку

Обратите внимание, что скрипт не удаляет столбцы 3 и 4 из заголовка, поскольку IDне равно id.

1
21.05.2021, 16:00
1 ответ

Как упоминал Стив, размер файла редко имеет значение на символьном устройстве.

Таким образом, решение просто открыть, прочитать, сделать. Какова вообще цель ftell здесь? Если вы хотите выделить буфер заранее, ответ таков: вы не можете.

Я предлагаю вам попробовать, что ваша программа делает с /dev/tty. Может быть, сначала подумайте, что, как вы ожидаете, произойдет или должно произойти.

Еще один момент заключается в том, что в системах Unix все файлы являются двоичными, поэтому режим rbне обязателен. В таких системах, как Windows, это имеет значение, но маловероятно, что /dev/usbвообще существует в Windows.

3
28.07.2021, 11:30

Теги

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