awk读取最大长度而不是分隔符

时间:2014-11-06 15:46:36

标签: bash awk fixed-length-record

无论如何,我可以在awk中读取固定长度的文件中的字符串吗?

我有一个名为dictionary的文件和另一个名为indexes的文件,我希望从indexes读取固定长度为4的字符串,并将其替换为{{1}的第一列1}}。

例如:

索引文件:

dictionary

字典文件:

0201000800030307

我希望结果如下:

hello   hey
hi      hoy
baby    hoy
baba    boy

是否可以使用0201 hey 0008 hoy 0003 hoy 0307 boy 执行此操作?或者如果不是,那么无论如何都要在awk中进行吗?

编辑:bash文件可以包含任何ascii charachter。

2 个答案:

答案 0 :(得分:2)

将GNU awk用于多字符RS:

$ awk '
    NR==FNR {
        while ($0!="") {
            a[++i] = substr($0,1,4)
            $0 = substr($0,5)
        }
        next
    }
    { print a[FNR], $2 }
' RS='^$' idx RS='\n' dict
0201 hey
0008 hoy
0003 hoy
0307 boy

答案 1 :(得分:1)

这应该有效

awk 'FNR==NR{while($0){a[++x]=substr($0,1,4);$0=substr($0,5)}next}$1=a[FNR]' file file2