awk часть скрипта bash не работает должным образом - PullRequest
2 голосов
/ 27 ноября 2011

Все выглядит нормально при использовании скрипта как #/bin/sh в Ubuntu, но теперь при использовании того же скрипта с #/bin/bash в красной шапке эта часть создает проблему.

   awk '{

    for (i = NF  - p - 2; i < NF  - 2; i++)

    printf "%s", ($i (i < NF - 2 - 1 ? OFS : ORS))

    }' p="$_padlen" RS=  ORS='\n' decrypt.txt > pad.txt

и этот ..

   awk '{

    for (i = NF - l - p - 2; i < NF - p - 2; i++)

    printf "%s", ($i (i < NF - p - 2 - 1 ? OFS : ORS))

    }' l="$_length" p="$_padlen" RS=  ORS='\n' decrypt.txt > prot_n_data.txt

при условии $padlen=1 и $length=13 это соответствующие выходные данные ...

[root@localhost scripts]# cat decrypt.txt 
00 15 00 15 00 0d dc ff  61 62 63 64 0a 00 01 11

Среди последних трех байтов, которые 00 01 11.00 - заполнение, а 01 - длина заполнения.

[root@localhost scripts]# cat pad.txt
0a

[root@localhost scripts]# cat prot_n_data.txt 
00 15 00 15 00 0d dc ff  61 62 63 64 0a 00 01 11 00 15 00 15 00 0d dc ff 
61 62 63 64

В то время как желаемый вывод ...

# cat pad.txt
00

# cat prot_n_data.txt 
00 15 00 15 00 0d dc ff  61 62 63 64 0a

Полностью застрял, получая нетподсказка ... Пожалуйста, помогите мне.

ИЛИ Atleast предложит мне альтернативу ...

РЕДАКТИРОВАТЬ: *

Это еще один пример файла, гдепредлагаемое решение не работает, предполагая, что $_padlen=3 и $_length=1159.

 [root@localhost scripts]# cat decrypt.txt 
 00 17 00 17 04 87 5d c5  74 68 69 73 20 69 73 20
 73 61 6d 70 6c 65 20 64  61 74 61 20 74 6f 20 73
 65 6e 64 0a 77 65 20 73  68 6f 75 6c 64 20 63 6f
 6e 63 65 6e 74 72 61 74  65 20 6f 6e 20 69 74 2e
 0a 74 68 69 73 20 69 73  20 73 61 6d 70 6c 65 20
 64 61 74 61 20 74 6f 20  73 65 6e 64 0a 77 65 20
 73 68 6f 75 6c 64 20 63  6f 6e 63 65 6e 74 72 61
 74 65 20 6f 6e 20 69 74  2e 0a 74 68 69 73 20 69
 73 20 73 61 6d 70 6c 65  20 64 61 74 61 20 74 6f
 20 73 65 6e 64 0a 77 65  20 73 68 6f 75 6c 64 20
 63 6f 6e 63 65 6e 74 72  61 74 65 20 6f 6e 20 69
 74 2e 0a 74 68 69 73 20  69 73 20 73 61 6d 70 6c
 65 20 64 61 74 61 20 74  6f 20 73 65 6e 64 0a 77
 65 20 73 68 6f 75 6c 64  20 63 6f 6e 63 65 6e 74
 72 61 74 65 20 6f 6e 20  69 74 2e 0a 74 68 69 73
 20 69 73 20 73 61 6d 70  6c 65 20 64 61 74 61 20
 74 6f 20 73 65 6e 64 0a  77 65 20 73 68 6f 75 6c
 64 20 63 6f 6e 63 65 6e  74 72 61 74 65 20 6f 6e
 20 69 74 2e 0a 74 68 69  73 20 69 73 20 73 61 6d
 70 6c 65 20 64 61 74 61  20 74 6f 20 73 65 6e 64
 0a 77 65 20 73 68 6f 75  6c 64 20 63 6f 6e 63 65
 6e 74 72 61 74 65 20 6f  6e 20 69 74 2e 0a 74 68
 69 73 20 69 73 20 73 61  6d 70 6c 65 20 64 61 74
 61 20 74 6f 20 73 65 6e  64 0a 77 65 20 73 68 6f
 75 6c 64 20 63 6f 6e 63  65 6e 74 72 61 74 65 20
 6f 6e 20 69 74 2e 0a 74  68 69 73 20 69 73 20 73
 61 6d 70 6c 65 20 64 61  74 61 20 74 6f 20 73 65
 6e 64 0a 77 65 20 73 68  6f 75 6c 64 20 63 6f 6e
 63 65 6e 74 72 61 74 65  20 6f 6e 20 69 74 2e 0a
 74 68 69 73 20 69 73 20  73 61 6d 70 6c 65 20 64
 61 74 61 20 74 6f 20 73  65 6e 64 0a 77 65 20 73
 68 6f 75 6c 64 20 63 6f  6e 63 65 6e 74 72 61 74
 65 20 6f 6e 20 69 74 2e  0a 74 68 69 73 20 69 73
 20 73 61 6d 70 6c 65 20  64 61 74 61 20 74 6f 20
 73 65 6e 64 0a 77 65 20  73 68 6f 75 6c 64 20 63
 6f 6e 63 65 6e 74 72 61  74 65 20 6f 6e 20 69 74
 2e 0a 74 68 69 73 20 69  73 20 73 61 6d 70 6c 65
 20 64 61 74 61 20 74 6f  20 73 65 6e 64 0a 77 65
 20 73 68 6f 75 6c 64 20  63 6f 6e 63 65 6e 74 72
 61 74 65 20 6f 6e 20 69  74 2e 0a 74 68 69 73 20
 69 73 20 73 61 6d 70 6c  65 20 64 61 74 61 20 74
 6f 20 73 65 6e 64 0a 77  65 20 73 68 6f 75 6c 64
 20 63 6f 6e 63 65 6e 74  72 61 74 65 20 6f 6e 20
 69 74 2e 0a 74 68 69 73  20 69 73 20 73 61 6d 70
 6c 65 20 64 61 74 61 20  74 6f 20 73 65 6e 64 0a
 77 65 20 73 68 6f 75 6c  64 20 63 6f 6e 63 65 6e
 74 72 61 74 65 20 6f 6e  20 69 74 2e 0a 74 68 69
 73 20 69 73 20 73 61 6d  70 6c 65 20 64 61 74 61
 20 74 6f 20 73 65 6e 64  0a 77 65 20 73 68 6f 75
 6c 64 20 63 6f 6e 63 65  6e 74 72 61 74 65 20 6f
 6e 20 69 74 2e 0a 74 68  69 73 20 69 73 20 73 61
 6d 70 6c 65 20 64 61 74  61 20 74 6f 20 73 65 6e
 64 0a 77 65 20 73 68 6f  75 6c 64 20 63 6f 6e 63
 65 6e 74 72 61 74 65 20  6f 6e 20 69 74 2e 0a 74
 68 69 73 20 69 73 20 73  61 6d 70 6c 65 20 64 61
 74 61 20 74 6f 20 73 65  6e 64 0a 77 65 20 73 68
 6f 75 6c 64 20 63 6f 6e  63 65 6e 74 72 61 74 65
 20 6f 6e 20 69 74 2e 0a  74 68 69 73 20 69 73 20
 73 61 6d 70 6c 65 20 64  61 74 61 20 74 6f 20 73
 65 6e 64 0a 77 65 20 73  68 6f 75 6c 64 20 63 6f
 6e 63 65 6e 74 72 61 74  65 20 6f 6e 20 69 74 2e
 0a 74 68 69 73 20 69 73  20 73 61 6d 70 6c 65 20
 64 61 74 61 20 74 6f 20  73 65 6e 64 0a 77 65 20
 73 68 6f 75 6c 64 20 63  6f 6e 63 65 6e 74 72 61
 74 65 20 6f 6e 20 69 74  2e 0a 74 68 69 73 20 69
 73 20 73 61 6d 70 6c 65  20 64 61 74 61 20 74 6f
 20 73 65 6e 64 0a 77 65  20 73 68 6f 75 6c 64 20
 63 6f 6e 63 65 6e 74 72  61 74 65 20 6f 6e 20 69
 74 2e 0a 74 68 69 73 20  69 73 20 73 61 6d 70 6c
 65 20 64 61 74 61 20 74  6f 20 73 65 6e 64 0a 77
 65 20 73 68 6f 75 6c 64  20 63 6f 6e 63 65 6e 74
 72 61 74 65 20 6f 6e 20  69 74 2e 0a 0a 0a 0a 0a
 0a 0a 0a 0a 0a 0a 0a 00  00 00 03 11

Я использовал команду ..

 [root@localhost scripts]# awk '{printf $0}' decrypt.txt | awk 'NF{for (i=NF-l-p-1;
 i<NF-p-1;i++) printf $i" "; print ""}' p=3 l=1159
 awk: (FILENAME=- FNR=1) fatal: attempt to access field -71

l просто вычисляется как wc -w decrypt.txt|cut -d " " -f1минус p минус 2

1 Ответ

1 голос
/ 27 ноября 2011

Попробуйте (возможно, вам придется протестировать его на нескольких образцах)

[jaypal~/Temp]$ cat file.txt 
00 15 00 15 00 0d dc ff  61 62 63 64 0a 00 01 11

Для Pad.txt:

[jaypal~/Temp]$ awk 'NF{for (i=NF-p-1;i<NF-1;i++) printf $i; print ""}' p=1 file.txt 
00

ДляProt_n_data.txt:

[jaypal~/Temp]$ awk 'NF{for (i=NF-l-p-1;i<NF-p-1;i++) printf $i" "; print ""}' p=1 l=13 file.txt 
00 15 00 15 00 0d dc ff 61 62 63 64 0a 

ОБНОВЛЕНО:

Поскольку файл фида перекрывается в новой строке, NF необходимо обрабатывать по-разному.NF - это количество полей в конкретной записи (которая по умолчанию является строкой).

pad.txt

awk 'BEGIN{RS=""} {for (i=NF-p-1;i<NF-1;i++) printf $i" "; print ""}' p=1 file.txt | sed 's/..\{47\}/&\n/g'

prot_n_data.txt

awk 'BEGIN{RS=""} {for (i=NF-l-p-1;i<NF-p-1;i++) printf $i" "; print ""}' p=3 l=1159 file1.txt | sed 's/..\{47\}/&\n/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...