linux/unix 将定界文件转换为固定宽度

标签 linux unix sh

我有一个将分隔文件转换为固定宽度文件的需求,详情如下。

输入文件示例:

AAA|BBB|C|1234|56
AA1|BB2|DD|12345|890

输出文件示例:

AAA  BBB   C   1234  56  
AA1  BB2   DD  12345 890

现场职位详情

  • 字段 1 从位置 1 开始,长度应为 5
  • 字段 2 从位置 6 开始,长度应为 6
  • 字段 3 从位置 12 开始,长度应为 4
  • 字段 4 从位置 16 开始,长度应为 6
  • 字段 5 从位置 22 开始,长度应为 3

最佳答案

另一种awk解决方案:

echo -e "AAA|BBB|C|1234|56\nAA1|BB2|DD|12345|890" | 
awk -F '|' '{printf "%-5s%-6s%-4s%-6s%-3s\n",$1,$2,$3,$4,$5}'

请注意 printf 语句中 %-3s 之前的 -,它将按照问题中的要求将字段左对齐。输出:

AAA  BBB   C   1234  56 
AA1  BB2   DD  12345 890

关于linux/unix 将定界文件转换为固定宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48525968/

相关文章:

c - gethostbyname 有什么问题?

c - 当 SIGINT 信号被忽略时打印字符串

linux - 用于在正确路径中运行 Java 类的通用脚本

Windows 10 将我的 .sh 文件关联到记事本

c - 运行c程序的linux脚本

linux - PHP - ZipArchive 已启用但未找到

unix - 有没有像 shm_open() 这样没有文件名的东西?

linux - 用于备份我的 "home"文件夹的 Bash 脚本

linux - 如何在 bash 脚本中执行自定义命令

linux - 最小自编译为 .pdf Rmarkdown 文件