Reputation: 91
I need to grab all swap partitions form my command
blkid
/dev/block/sda4: LABEL="system" UUID="da594c53-9beb-f85c-85c5-cedf76546f7a" TYPE="ext4"
/dev/block/swap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/swap1: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/vnswap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/zram0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/sde10: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/sde11: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/sdd13: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat"
/dev/block/sdd17: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat"
/dev/block/sdd22: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/mmcblk0p1: UUID="9016-4EF8" TYPE="vfat"
/dev/block/loop64: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
what I need is to grab the path & the UUID of that partition and put them into sperate variables, to know if it is a swap partition TYPE must be TYPE="swap" the UUID & path value are variable (can change) here's some examples
/dev/block/swap0
/dev/block/swap1
/dev/block/swap2
/dev/block/vnswap0
/dev/block/vnswap1
/dev/block/zram0
I actually found a code that can do the job but it is copyrighted and I prefer not to use it, so any alternatives are appreciated .. This one is a bit different it looks for swaps in "/proc/swaps"
grep zram /proc/swaps
/dev/swap0 partition 2097148 2816 16383
/dev/zram0 partition 2097148 2816 16383
/dev/zram1 partition 2097148 2816 16383
I will include it below just for the reference
# Find all swapregions and target each one for swapoff
# Don't assume it's in the first field of swaps, find it
SR="\/dev\/"
PS="/proc/swap*"
DIE=`awk -v SBD="$SR" ' $0 ~ SBD {
for ( i=1;i<=NF;i++ )
{
if ( $i ~ ( "^" SBD ) )
{
printf "%s;", $i
}
}
}' $PS`
saveifs=$IFS
IFS=';'
# I could have put all this in awk and just eval'd it
# But where's the fun in that
for i in $DIE
do
case $i in
*zram*)
j=`echo $i | sed 's/.*zram//'`
( (
echo $j > /sys/class/zram-control/hot_remove
echo 1 > /sys/block/zram${j}/reset
swapoff $i
) & )
;;
*)
if [ -n $i ]; then
( ( swapoff $i ) & )
fi
;;
esac
done
IFS=$saveifs
exit 0
Upvotes: 0
Views: 259
Reputation: 8711
Using Perl, just use the "command" instead of "cat ranger.txt"
/tmp> cat ranger.txt
blkid
/dev/block/sda4: LABEL="system" UUID="da594c53-9beb-f85c-85c5-cedf76546f7a" TYPE="ext4"
/dev/block/swap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/swap1: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/vnswap0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/zram0: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="swap"
/dev/block/sde10: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/sde11: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/sdd13: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat"
/dev/block/sdd17: SEC_TYPE="msdos" UUID="00BC-614E" TYPE="vfat"
/dev/block/sdd22: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/dev/block/mmcblk0p1: UUID="9016-4EF8" TYPE="vfat"
/dev/block/loop64: UUID="57f8f4bc-abf4-655f-bf67-946fc0f9f25b" TYPE="ext4"
/tmp> cat ranger.txt | perl -ne ' /(^.+?):.*UUID=\"(.+?)\".*TYPE=\"swap\"/g and print "$1 $2\n" '
/dev/block/swap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/block/swap1 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/block/vnswap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/block/zram0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/tmp>
Upvotes: 0
Reputation: 133538
Could you please try following(I am driving right now so didn't test it, will test it once I reach home too :) ).
awk '$0 ~ /swap/ && match($0,/\/[^:]*/){path=substr($0,RSTART,RLENGTH);match($0,/UUID=\"[^"]*/);print path,substr($0,RSTART+6,RLENGTH-6);path=""}' Input_file
As per OP 2 variables needed so adding solutions as per that also now.
uuids=$(awk '$0 ~ /swap/ && match($0,/UUID=\"[^"]*/){print substr($0,RSTART+6,RLENGTH-6)}' Input_file)
paths=$(awk '$0 ~ /swap/ && match($0,/\/[^:]*/){substr($0,RSTART,RLENGTH);print substr($0,RSTART,RLENGTH)}' Input_file)
Upvotes: 1
Reputation: 18901
script.awk
/TYPE="swap"/ {
path = $1
uuid = $2
sub(":", "", path)
sub("UUID=\"", "", uuid)
sub("\"", "", uuid)
print path, uuid
}
Returns the following result: e.g. blkid | awk -f script.awk
/dev/block/swap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/block/swap1 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/block/vnswap0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
/dev/block/zram0 57f8f4bc-abf4-655f-bf67-946fc0f9f25b
Does that work for you?
Upvotes: 0