команда печати awk с условием NR > var

Блок ввода-вывода имеет размер блока для обмена с блочным устройством.

Блок(stat)представляет собой количество ячеек файловой системы (и, естественно, зависит от типа файловой системы ), необходимого для хранения файла. Это легко проверить:

$ stat shell
  File: ‘shell’
  Size: 4295        Blocks: 16         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 16997503    Links: 1
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/   yurij)   Gid: ( 1000/   yurij)
Access: 2018-04-11 18:17:38.614827347 +0300
Modify: 2018-04-11 18:17:34.359967012 +0300
Change: 2018-04-19 01:07:03.729000000 +0300
 Birth: - 

$ pwd
/home/yurij/develop/shell/usr/local/bin
$ sudo blockdev --getbsz /dev/mapper/cl-root
[sudo] password for yurij:
512 # cell size in bytes

8 КБ = 8192 байта

8192 байта / 512 байт = 16 блоков

filefrag:

$ filefrag -v shell
Filesystem type is: 58465342
File size of shell is 4295 (2 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       1:    1141480..   1141481:      2:             eof
shell: 1 extent found

Для чтения/записи файла с/на блочное устройство необходимы две операции чтения/записи.

0
11.03.2020, 00:47
1 ответ

Проблема:

FNR>o
  • Использование оператора >с неинициализированным значением
    • Хотя oне инициализирован, он имеет числовое значение 0и строковое значение пустой строки
    • В вашем скрипте oустанавливается вместе с /^title/ { o=FNR+2 }, но /^title/не появляется до третьей записи. Таким образом, для первых двух записей oне инициализируется, а FNR>oоценивается как true(, потому что FNR==1и FNR==2являютсяgreater than zero)

Возможное решение:

o && FNR>o
  • Укажите, что oне должно быть -нулем, в дополнение кFNR>o

Кроме того, oнесколько сбивает с толку однобуквенное имя переменной -— рассмотрите возможность использования буквы, например n, или более описательного слова, такого как output, вместо


print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)

можно упростить до:

printf("%-10s %-10d %-10s\n",FILENAME,o,$0)

или даже:

printf "%-10s %-10d %-10s\n",FILENAME,o,$0
3
28.04.2021, 23:20

Теги

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