awk a integer and replace it minus X

hey, i have a list of devices that looks like so:

VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(358271365120608989UL))),Option<ulong>())))),2098560),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(650586938465599244UL))),Option<ulong>())))),2098560),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(22574479957500438UL))),Option<ulong>())))),4195200),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(93913043472124733UL))),Option<ulong>())))),4195200),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(217131279596132951UL))),Option<ulong>())))),4195200),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(303655871981484697UL))),Option<ulong>())))),4195200),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(392171455982529305UL))),Option<ulong>())))),8390400),

i m trying to awk the size and reduce 5 MB from each line like so:

VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(358271365120608989UL))),Option<ulong>())))),2098555),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(650586938465599244UL))),Option<ulong>())))),2098555),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(22574479957500438UL))),Option<ulong>())))),4195195),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(93913043472124733UL))),Option<ulong>())))),4195195),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(217131279596132951UL))),Option<ulong>())))),4195195),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(303655871981484697UL))),Option<ulong>())))),4195195),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(392171455982529305UL))),Option<ulong>())))),8390195),

i tried a few ways but none of them worked perhaps awk is not the way to go
please advise
thank u.

$ nawk 'BEGIN{FS="," ; OFS=","} {$(NF-1)=$(NF-1)-5")"; print}' infile
1 Like

my problem that some lines dosent have a "," at the end of the line and
then it dosent work like here :

VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(358271365120608989UL))),Option<ulong>())))),2098560),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(650586938465599244UL))),Option<ulong>())))),2098560)
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(22574479957500438UL))),Option<ulong>())))),4195200),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(93913043472124733UL))),Option<ulong>())))),4195200),
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(217131279596132951UL))),Option<ulong>())))),4195200)
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(303655871981484697UL))),Option<ulong>())))),4195200)
VolumeTask(DeviceName(DeviceName(DeviceNameInfo(MultiPathType_UID(Option<GUDeviceID>(GUDeviceID(ulonglong(392171455982529305UL))),Option<ulong>())))),8390400),

is there a quick fix?
thank u

Go with this ..

$ nawk 'BEGIN{FS=",";OFS=","}!/,$/{$NF=$NF-5")";print}/,$/{$(NF-1)=$(NF-1)-5")"; print}' infile
1 Like

thank u ,
but i get the following:

/tmp/Boaz> nawk 'BEGIN{FS=",";OFS=","}!/,$/{$NF=$NF-5")";print}/,$/{$(NF-1)=$(NF-1)-5")"; print}' test
/,: Event not found.

I always disable bash history expansion with "set -H", or you can escape the "!" with "\".

perl -pe's/(?<=\)\)\)\),)(\d+)/($1-5)/e' infile

Add "-i" to the perl options if you want in place editing.

1 Like