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

Для масштабируемого очищения всех полей от энного до mth в команда awk вы не были должны hardcode значения; необходимо использовать "для" цикла:

awk 'BEGIN { FS = ","; OFS = ","} {for (i = 3; i <= 4; i++) { $i = "" }; print}' inputfile

, Если вы хотите заменить другой диапазон пустым местом, скорректируйте значения "3" и "4" в вышеупомянутом коде.


Объяснение:

Эти НАЧИНАЮТСЯ {...} блок обрабатывается перед рассмотрением любой из строк файла.

OFS устанавливает выходного разделителя полей, и , FS устанавливает разделителя полей для входа. Мы хотим, чтобы они оба были запятыми.

для цикл точно так же, как синтаксис C. В этом случае это выполняет следующий {блок кода} для я как 3 и как 4.

$i заслуживает упоминания, потому что это совершенно непохоже на синтаксис оболочки. В сценариях оболочки название переменной должно быть снабжено префиксом $ для расширения до значения переменной. Не так в awk. В awk, я отдельно расширяюсь до его значения — 3 или 4 в этом случае — и , $ сопровождаемый числом означает поле в той пронумерованной позиции. Так $i ="" наборы я th поле к пустой строке.

Затем печать команда, данная без аргументов, значений по умолчанию к печати всей строки. На самом деле это берет все поля строки, как разграничено FS, и, как изменено любыми предыдущими командами, и печатает их всех, разделенных OFS и сопровождаемый новой строкой в конце.


эквивалент короче управляйте:

Я считаю, что приведенная выше команда является самой чистой и легко расширяемой, если вы собираетесь включить ее в сценарий. Это очень ясно о том, что он делает и очень читаемо. Кроме того, вся вещь может быть разбита на автономный сценарий awk без изменений; что-то, что невозможно сделать автоматически при использовании -v и -F переключается на вызов awk . (Это не причина не использовать их, конечно. Просто то, что нужно знать.)

Для одноразового использования, особенно, я бы использовал следующее:

awk -F, -v OFS=, '{for (i = 3; i <= 4; i++) { $i = "" }; print}' inputfile

Переключатель -F устанавливает значение FS . Переключатель -v позволяет задавать значения переменных awk в командной строке.

В более общем плане, переключатель -v может быть чрезвычайно полезен для передачи переменных оболочки в виде переменных awk: -v myawkvar = «$ myshellvar» и для изменения поведения во время выполнения автономного сценария awk , который извлекается из файла сценария с параметром -f scriptname

1
05.10.2018, 04:36
1 ответ

Ваш код почти готов, теперь все, что вам нужно сделать, это рассматривать $cmdкак очередь строк, заканчивающихся новой строкой -. В наивном Python -псевдокод -, потому что я давно не писал PHP:

input = ''
try:
    first_command, remaining_input = input.split('\n', 1)
    execute(first_command)
    input = remaining_input
except ValueError:
    # No newline yet; we have to wait for more input
    input = socket.receive()

Таким образом, вы можете обрабатывать как потоки ввода, так и отдельные интерактивные команды, которые, вероятно, не будут использоваться в вашем приложении.

0
27.01.2020, 23:42

Теги

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