使用数组在bash中更改行分隔的文本文件

时间:2015-09-15 12:51:03

标签: bash awk sed

不确定是否已经问过这个问题,但基本上我想从包含特殊字符的file1中读取并将其更改为URL编码版本。 file2是一个以管道分隔的文档,例如:#|%23。

  

因此,当脚本从file1读取“#”时,它会将其更改为   “%23”。有174个不同的字符可以识别,如果   陈述是不可行的。

注意:我写这是bash

我正在考虑使用像sed或awk这样的东西但是我不知道如何将它用于文本文件。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

awk -F '|' '
   FNR == NR { Trsl[ $1 ] = $2; next}
   FNR != NR { 
      s0 = $0
      for( Char in Trsl) {
         Cnt = split( s0, a0, Char )
         s0 = a0[ 1 ]
         for( i = 2; i <= Cnt; i++) s0 = s0 Trsl[ Char] a0[ i]
         }
      print s0
     }
   ' File2 File1
  • 文件顺序对于在要翻译的文件之前阅读翻译文件非常重要
  • 假设|不在特殊字符列表中
  • 由于元字符的意外结果,
  • gsub无法使用
  • 作为@karakfa备注,翻译顺序(与File2条目相关)不保留,因此如果在早期翻译结果中使用字符,则会出现一些不需要的结果,如 - &gt; %20% - &gt; Percent会为原始Percent20
  • 提供