Скрипт Awk не запускается, похоже, я пропустил скобки, но я их посчитал, их число четное - PullRequest
0 голосов
/ 17 апреля 2020

Я пишу сценарий awk в терминал Ubuntu. Но это не начинает работать. Кажется, я
упустил что-то из этого: "", '', (,), {,}, но я посчитал каждый символ таким, и их число
четное. Так что я действительно не понимаю, где я потерпел неудачу с этими скриптами
(предисловие, я написал cal> database / calendar.txt)
псевдокод scipt для более легкого понимания самого скрипта: // first Я получаю текущий день и текущий день недели из системы
//, затем делаю calendar.txt одной строкой с одним пробелом между полями (в терминологии awk)
// затем сначала нахожу текущий день недели ( понедельник и т. д.)
// затем я нахожу текущий день (16,17 и т. д.)
// в конце концов, я приравниваю найденные значения к переменным (result_day и result_week_day)
в конце концов я пытаясь запустить его, к сожалению, это не работает, ничего не выводится, скрипт просто ожидает ввода дальнейших команд, например, если я пропустил скобку или что-то в этом роде

script:

awk -v day_searched="$(date +%"d")" -v week_day_searched="$(date +"%a")" 
'BEGIN{FS=" ";RS="NOT_EXISTING_dELIMITER"} {
current_field = 0
resulted_day = "not_found_yet"
resulted_week_day= "not_found_yet"
max_file_lenght = 100

while (current_field < max_file_lenght) {
  if ($(current_field) == week_day_searched) {
    resulted_week_day = $(current_field)
  }
  current_field++
}

current_field_second = 0

while (current_field_second < max_file_lenght) {
  if ($(current_field_second) == day_searched) {
    resulted_day = $(current_field_second) }
  curent_field_second++
  }
printf "TOday is %s %s March", resulted_week_day, resulted_day}' database/calendar.txt

1 Ответ

1 голос
/ 18 апреля 2020

Используя ваш awk в качестве базы:

BEGIN {
    FS=" "
    RS=""                                            # read upto an empty record
}
{
    gsub(/[^A-Za-z0-9 ]/,"")                         # remove special chars reading file
    current_field = 1                                # start from 1
    resulted_day = "not_found_yet"
    resulted_week_day= "not_found_yet"
    # max_file_lenght = 100                          # use NF instead

    week_day_searched=substr(week_day_searched,1,2)  # take only 2 first chars of weekday

    while (current_field <= NF) {
        if ($current_field ==week_day_searched) {
            resulted_week_day = $current_field
        }
        current_field++
    }

    current_field_second = 1                         # start from 1

    while (current_field_second <= NF) {
        if ($current_field_second == day_searched) { 
            resulted_day = $current_field_second }
        current_field_second++                       # fix typo
    }
    printf "TOday is %s %s March\n", resulted_week_day, resulted_day
}

Проверьте это:

$ awk -v day_searched="$(date +"%d")" -v week_day_searched="$(date +"%a")" -f program.awk file
TOday is Sa 18 March

cal производит специальные символы (по крайней мере для меня, текущая дата выделена, проверьте 18-е число ниже):

$ cal | hexdump -C
00000000  20 20 20 20 20 41 70 72  69 6c 20 32 30 32 30 20  |     April 2020 |
00000010  20 20 20 20 20 20 0a 53  75 20 4d 6f 20 54 75 20  |      .Su Mo Tu |
00000020  57 65 20 54 68 20 46 72  20 53 61 20 20 0a 20 20  |We Th Fr Sa  .  |
00000030  20 20 20 20 20 20 20 20  31 20 20 32 20 20 33 20  |        1  2  3 |
00000040  20 34 20 20 0a 20 35 20  20 36 20 20 37 20 20 38  | 4  . 5  6  7  8|
00000050  20 20 39 20 31 30 20 31  31 20 20 0a 31 32 20 31  |  9 10 11  .12 1|
00000060  33 20 31 34 20 31 35 20  31 36 20 31 37 20 5f 08  |3 14 15 16 17 _.|
00000070  31 5f 08 38 20 20 0a 31  39 20 32 30 20 32 31 20  |1_.8  .19 20 21 |
00000080  32 32 20 32 33 20 32 34  20 32 35 20 20 0a 32 36  |22 23 24 25  .26|
00000090  20 32 37 20 32 38 20 32  39 20 33 30 20 20 20 20  | 27 28 29 30    |
000000a0  20 20 20 20 0a 20 20 20  20 20 20 20 20 20 20 20  |    .           |
000000b0  20 20 20 20 20 20 20 20  20 20 20 0a              |           .|
000000bc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...