使用基于固定长度的分隔符将文件中的每一行拆分为子字符串

时间:2017-07-26 21:56:10

标签: linux string split offset delimiter

我需要一些帮助来将文件转换为具有以下要求的新文件:

  
      
  1. 根据固定长度
  2. 将每一行(长字符串)拆分为子字符串   
  3. 使用管道分隔符“|”在每个子字符串之间
  4.   
  5. 按原样保留上一个未定义的列(子字符串),但添加“|”在它之前。
  6.   

这是一个例子,假设一个文件(test.dat)有两行:

PG123ABCD A 000{000
MK789HJKL32H00

Column 1: length(2)
Column 2: length(3) 
Column 3: length(4)
Column 4: length(3)
Column 5: undefined, use all remaining value

以下是我需要的最终输出。该示例只有2行,假设我有一个1k +类似行的文件,我需要根据上述要求将原始文件转换为新文件。

PG|123|ABCD| A |000{000
MK|789|HJKL|32H|00

1 个答案:

答案 0 :(得分:2)

cut -b 1-2,3-5,6-9,10-12,13-500 --output-delimiter='|' test.dat > 1.dat

我写了上面的代码,它输出的确是我需要的。

  

我唯一的问题是最后一栏,我使用 13-500 作为未定义列的固定长度,但是未定义的剩余字符串的长度在不同的行中有所不同,是否有通用的方法定义最后一列的长度?例如,像 13-max_lengh_of_the_row