Need an awk / sed / or perl one-liner to remove last 4 characters with non-unique pattern.

Hi, I'm writing a ksh script and trying to use an awk / sed / or perl one-liner to remove the last 4 characters of a line in a file if it begins with a period.

Here is the contents of the file... the column in which I want to remove the last 4 characters is the last column. ($6 in awk). I've tried a few commands but I'm totally stumped. Thanks for any assistance.

 
QUX         | LIBMEM.SYS.OA      | 20110920 110704.951
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711.503
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714.413
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601.102
WS          | LIBMEM.SYS.OA      | 20110923 084845.744
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839.880
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842

Desired file contents:

 
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842

Thanks!

sed 's/[.][0-9]*$//' myFile
1 Like

Awesome! worked perfect, thanks so much.

any example in AWK ?

awk '{sub(/\.[0-9]*$/,"")}11' input_file

--ahamed

similar idea:

nawk '{gsub("[.][0-9]*$", "");print}' myFile
 
nawk -F\| 'BEGIN{OFS="|"}{if($NF~/\./)$NF=substr($NF,1,index($NF,".")-1); print}' test                                                           
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842

---------- Post updated at 08:23 AM ---------- Previous update was at 08:19 AM ----------

$ perl -lane '$_=~s/[.][0-9]*$//; print $_' test
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ cat f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704.951
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711.503
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714.413
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601.102
WS          | LIBMEM.SYS.OA      | 20110923 084845.744
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839.880
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ cut -c1-50 f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ perl -plne 's/\.\d+$//' f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ perl -plne 's/^(.*?)\.\d+$/$1/' f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ perl -plne 'substr($_,50)=""' f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ perl -F"\." -plane '$_=join".",@F[0..2]' f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$ perl -plne '$_=unpack("A50",$_)' f12
QUX         | LIBMEM.SYS.OA      | 20110920 110704
SA          | LIBMEM.SYS.OA      | 20110920 110706
SD          | LIBMEM.SYS.OA      | 20110920 110708
SP          | LIBMEM.SYS.OA      | 20110920 110711
SR          | LIBMEM.SYS.OA      | 20110920 110713
SYSTEM      | LIBMEM.SYS.OA      | 20110920 110714
UB          | LIBMEM.SYS.OA      | 20110920 110716
VDRDAILY    | LIBMEM.SYS.OA      | 20110920 110720
VDRWKLY     | LIBMEM.SYS.OA      | 20110920 110831
VP          | LIBMEM.SYS.OA      | 20110920 110834
WC          | LIBMEM.SYS.OA      | 20110922 131601
WS          | LIBMEM.SYS.OA      | 20110923 084845
AD          | LIBMEM.SYS.OA      | 20110920 112837
AQ          | LIBMEM.SYS.OA      | 20110920 112839
DD          | LIBMEM.SYS.OA      | 20110920 112840
DP          | LIBMEM.SYS.OA      | 20110920 112842
$
$

tyler_durden

cut -c 1-50 infile
sed 's/\....$//' infile
awk -F. NF=3 OFS=. infile

By Sed

echo "aaa.12345" | sed -r -n 's/\..{4,}$//p'