awk部分bash脚本无法正常工作

时间:2011-11-27 11:21:38

标签: linux bash shell awk

在ubuntu上使用脚本#/bin/sh时,一切似乎都很好,但现在在红帽上使用与#/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 1100是填充,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 个答案:

答案 0 :(得分:1)

试试这个(你可能需要针对更多样本进行测试)

[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 

<强>更新:

由于Feed文件与新行重叠,因此需要对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'