同时剪切字符和字段

同时剪切字符和字段

我有这样的记录:

2011-05-29 17:51:34 => 'HS|CMGC|RN431|CI13950|CH7-4a37-afe2-acabfc9d262d|DA110529|TI175133|'

我希望我的最终输出是这样的:

2011-05-29 17:51:34  CI13950

我可以像这样使用 cut 得到每个部分:

$ cut -c 1-19
2011-05-29 17:51:34
$ cut -d  '|' -f 4
CI13950

我无法将两者结合起来:

$ cut -c 1-19 -d  '|' -f 4
cut: only one type of list may be specified

有什么建议么?

答案1

剪切一次就完成了它的工作。你可以运行cut两次来进一步减少它,但听起来你需要使用类似的东西awksed、 或perl代替。

运行多个 s 的示例cut

cut -f 2 | cut -c 3-6

使用示例perl将在您的数据线上工作:

perl -pne "s/=> '([^|]+\|){3}([^|]+)/\2/g"

这是sedFred 在评论中的版本:

sed -re "s/=> ([^|]*\|){3}([^|]*).*/\2/"

答案2

awk '{split($NF,x,"|"); print $1, $2, x[4]}'

答案3

这个问题看起来奇怪地熟悉,尽管我认为这实际上是第一位的。

我看到的最简单、最易读的方法是使用 Awk,如下所示:

awk -F'|' '{print substr($0,1,19), $4}' text.txt

这是确切地相当于您尝试的命令cut -c 1-19 -d '|' -f 4,只不过它是工作代码。 ;)

相关内容