2014-11-06 71 views
0

反正有,這樣我可以從固定長度的文件中讀取字符串awkawk用最大長度而不是分隔符讀取

我有一個名爲dictionary文件,並命名爲indexes另一個文件,我想從indexes讀取的4個固定長度的字符串,並與dictionary第一列替換它們。

例如:

索引文件:

0201000800030307 

字典文件:

hello hey 
hi  hoy 
baby hoy 
baba boy 

,我想結果是這樣的:

0201 hey 
0008 hoy 
0003 hoy 
0307 boy 

是有可能使用做到這一點?或者如果不是的話,有沒有在bash

編輯:indexes文件可以包含任何ascii charachter。

+0

是指標只是一個長線? – 2014-11-06 15:55:29

+0

@Jidder編輯:實際上索引文件也可以包含'0A'(\ n)charachter也 – 2014-11-06 15:56:06

回答

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 
+0

我得到了完全相同的解決方案:( – 2014-11-06 16:12:22

+0

嗯,不完全相同... :-)看到我的意見在您的解決方案。 – 2014-11-06 16:13:54

1

這應該工作

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

如果索引文件中的4個連續字符是零或空格,它將會失敗。如果索引文件中存在'\ n's,那麼它也會失敗,因爲OP說有可能存在。除此之外,它看起來非常熟悉;-)。 – 2014-11-06 16:13:03

相關問題