【问题标题】:Split each row in a file into substrings with delimiter based on fixed length [closed]根据固定长度将文件中的每一行拆分为带有分隔符的子字符串[关闭]
【发布时间】:2017-07-26 21:56:09
【问题描述】:

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

  1. 将每一行(长字符串)按照固定长度拆分成子字符串
  2. 使用管道分隔符“|”每个子字符串之间
  3. 保留最后一个未定义的列(子字符串),但添加“|”在它之前。

这里是示例,假设一个文件 (test.dat) 有 2 行:

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

【问题讨论】:

  • 由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 您可能想Take the Tour 了解如何有效地使用 Stack Overflow。同时,也许Rent A CoderFreelancer 可以帮助你。

标签: linux string split offset delimiter


【解决方案1】:
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

【讨论】:

  • 你可以使用13-从第13个字符开始指定
  • 谢谢@Bertrand Martel,这行得通!
猜你喜欢
  • 2023-03-11
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
相关资源
最近更新 更多