Shell

剪切字元和欄位

  • November 13, 2016

我有這樣的記錄:

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

有什麼建議?

Cut 一次就完成了它的工作。您可以執行cut兩次以進一步削減它,但聽起來您需要使用類似awk,sed或的東西perl

執行多個cuts 的範例:

cut -f 2 | cut -c 3-6

使用它的範例perl將在您的數據線上工作:

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

這是sed評論中 Fred 的一個版本:

sed -re "s/=> ([^|]*\|){3}([^|]*).*/\2/"
awk '{split($NF,x,"|"); print $1, $2, x[4]}'

引用自:https://unix.stackexchange.com/questions/14224