我有3行的文件,如下所示。使用Linux,我如何获取行的拆分变量并将其附加到同一行

问题描述 投票:0回答:3

使用linux,如何获得给定输入的以下所需输出。输入文件:

Line1: StringA1, stringB1| stringC1, stringD1, stringE1
Line2: StringA2, stringB2| stringC2, stringD2
Line3: StringA3, stringB3| stringC3, stringD3, stringE3, stringF3

我的输出应该是:

StringA1, stringB1| stringC1
StringA1, stringB1| stringD1
StringA1, stringB1| stringE1
StringA2, stringB2| stringC2
StringA2, stringB2| stringD2
StringA3, stringB3| stringC3
StringA3, stringB3| stringD3
StringA3, stringB3| stringE3
StringA3, stringB3| stringF3
linux shell ksh
3个回答
2
投票

假设:

  • 所有行至少有3个字段
  • 这些行不包含字符串Line#:(否则我们只需要修改建议的脚本)

样本数据:

$ cat strings.dat
StringA1, stringB1| stringC1, stringD1, stringE1
StringA2, stringB2| stringC2, stringD2
StringA3, stringB3| stringC3, stringD3, stringE3, stringF3

[一种awk解决方案:

awk -F"[,|]" '
{ for ( i=3;i<=NF;i++ )
      { printf "%s,%s|%s\n", $1, $2, $i }
}' strings.dat

位置:

  • [-F"[,|]"-使用逗号和管道(,|)作为输入定界符]
  • [for ( i=3;i<=NF;i++ )-对于字段3至行尾(NF ==字段数==最后一个字段)] >>
  • [{ printf ... }-打印第一,第二和ith字段
  • 运行上述结果:

StringA1, stringB1| stringC1
StringA1, stringB1| stringD1
StringA1, stringB1| stringE1
StringA2, stringB2| stringC2
StringA2, stringB2| stringD2
StringA3, stringB3| stringC3
StringA3, stringB3| stringD3
StringA3, stringB3| stringE3
StringA3, stringB3| stringF3

1
投票

当您在sed中提出解决方案时,将变得难以阅读且难以维护:


0
投票

为了产生所需的输出,如果在[,|]上分割,则在输出结果之前,必须进一步删除field1

© www.soinside.com 2019 - 2024. All rights reserved.