使用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
假设:
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
当您在sed
中提出解决方案时,将变得难以阅读且难以维护:
为了产生所需的输出,如果在[,|]
上分割,则在输出结果之前,必须进一步删除field1