Thursday, March 15, 2012

cygwin ແລະ linux ໃນ windows

ພວກເຮົາບາງຄົນ ຄົງໄດຍິນ unix linux ມາແລ້ວ ແລະບາງຄົນຢາກລອງໃຊ້.
ສ່ວນໃຫຍ່ທີ່ເຫັນນິຍົມແມ່ນລົງ VMware ຫຼື Virtualbox ແຕ່ສຳຫຼັບຄົນທີ່ບໍ່ຕ້ອງການຍຸ້ງຍາກ ຢາກສຶກສາການໃຊ້ຄຳສັ່ງ UNIX/LINUX ກໍ່ສາມາດໃຊ້ cygwin ແທນ.

cygwin ເປັນໂປຼແກຼມພັດທະນາຂຶ້ນສຳຫຼັບຄົນທີ່ຍັງໃຊ້ windows ແຕ່ຢາກມີຄວາມສາມາດຂອງ unix.

download cygwin ໄດ້: http://cygwin.com/install.html

ຫຼັງຈາກນັ້ນກໍ່ຕິດຕັ້ງຄືກັບໂປຼແກຼມທົ່ວໄປ. ເມື່ອສຳເລັດ ຢູ່ໝ້າຈໍຈະມີ icon ດັ່ງກ່າວຢູ່ໝ້າຈໍ ສາມາດ click ແລ້ວລອງຄຳສັ່ງຕ່າງໆຂອງ unix/linux ໄດ້ເລີຍ.

ຕົວຢ່າງ:
ls

pwd

ls -la

ls -la | awk '{print $1"|"$2}'

ລາຍລະອຽກຂອງຄຳສັ່ງ unix/linux ທີ່ http://www.ee.surrey.ac.uk/Teaching/Unix/

ທ່ານສາມາດເຂົ້າ drive c ໄດ້ຢູ່ /cygdrive/c

ການໃຊ້ unix/linux ລະບຸຊື່ file ຫຼື directory ຕ້ອງພິມໃຫ້ຖືກ, ຕົງຢ່າງ myfile ບໍ່ຄື Myfile. ຕ້ອງໃຊ້ວົງຢືມຄູ່ຖ້າມີຍະຫ່າງ ເຊັ່ນ My file ຕ້ອງພິມ "My file"

ຂໍໃຫ້ທ່ານສະໝຸກກັບການສຶກສາ

ການເຮັດວຽກກັບ text file ທີ່ສັບຊ້ອນ

ສົມມຸດເຮົາມີ file ຊື່ inputfile.txt ມີຮູບແບບດັ່ງນີ້:

[a]6g,13 a2
[c]f3,34 d6
[g]10,5 12

ເຮົາຕ້ອງການຂໍ້ມູນໃນວົງຂໍເປັນຖັນທີ 1, ຫຼັງວົງຂໍເປັນຖັນທີ 2, ຫຼັງຈຸດເປັນຖັນທີ 3 ແລະຫຼັງຍະຫວ່າງເປັນຖັນ ທີ 4, ໂດຍອອກມາໃຊ້ເຄື່ອງໜາຍ | ເປັນຕົວແຍກຖັນ. ດັ່ງລຸ່ມນີ້:

a|6g|13|a2
c|f3|34|d6
g|10|5|12

awk script ຈະຊ່ວຍດັ່ງນີ້:
awk -F"[\[\]\, ]+" '{print $2"|"$3"|"$4"|"$5}' inputfile.txt

ອະທິບາຍ:
awk  ເປັນຄຳສັ່ງໃຊ້ໂປຼແກຼມ awk ໃນ unix, linux, cygwin
-F     ເປັນສ່ວນປະກາດຕົວແຍກຖັນ ຫຼື Field Separator ໃນພາສາອັງກິດ
" "    ສ່ວນບັນຍາຍຕົວແຍກຖັນ
[ ]    ເປັນສ່ວນພິເສດ ຖ້າເຮົາມີຕົວແຍກຖັນຫຼາຍແບບໃນ file ດຽວກັນ
\[     ປະກາດວ່າເຄື່ອງໜາຍເປີດວົງຂໍ ([) ເປັນຕົວແຍກຖັນທີ 1
\]     ປະກາດວ່າເຄື່ອງໜາຍເປີດວົງຂໍ (]) ເປັນຕົວແຍກຖັນທີ 2
\,     ປະກາດວ່າເຄື່ອງໜາຍຈຸດ (,) ເປັນຕົວແຍກຖັນທີ 3
       ປະກາດວ່າ Space ເປັນຕົວແຍກຖັນທີ 4
+    ປະກາດວ່າ ໃຫ້ໃຊ້ Space ເປັນຕົວແຍກແຖວຕໍ່ໆໄປ

ຖ້າທ່ານມີຄຳຖາມຫຍັງເພິ່ມ ສາມາດຕິດຕໍ່ໄດ້ laoanywhere at yahoo dot com.

Friday, August 12, 2011

awk ​ໃນ​ 5 ນາທີ (awk in 5 minutes)

awk
ຜູ້ໃຊ້: ຜູ້ທີ່ຕ້ອງການເຮັດວຽກກັບ text file ມີລັກສະນະເປັນຕາຕະລາງ (tabular text file)
ປະ​ເພດ: ​ໃຊ້​ກັບ​ຂໍ້​ມູນ​ເປັນ​ຕົວ​ອັກສອນ (text file)
ຈຸດ​ເດັ່ນ: ​ໄວ​ແລະ​ສະດວກ
ພື້ນຖານ​ຄວາມ​ຮູ້: ພາສາ​ຊີ, unix/linux/DOS
OS: Unix, Linux, Windows
ໝາຍ​ເຫດ​: ​​ແມ່ນ​ຄຳ​ສັ່ງ
                ຜົນ​ໄດ້​ຮັບ
                # ​ເຄື່ອງໝາຍ ໝາຍ​ເຫດ ​ໃຊ້​ໃນ unix/linux
ຕົວຢ່າງຕ່າງ​ໆລຸ່ມ​ນີ້ ​ແມ່ນ​ສຳ​ຫຼັບ​ເຄື່ອງ Linux:

$echo -e "a,1,2,3\n,b,4,5,6\n,d,7,8,9\n" #ຄຳ​ສັ່ງ​ນີ້​ສະ​ແດງ​ໃຫ້​ເຫັນ​ລັກສະນະ​ຂອງ​ຂໍ້​ມູນ​ທີ່​ເຮົາ​ຈະ​ສ້າງ
a,1,2,3
b,4,5,6
d,7,8,9

$echo -e "a,1,2,3\n,b,4,5,6\n,d,7,8,9\n" >data.txt #ຄຳ​ສັ່ງ​ນີ້​ສ້າງ file data.txt

$cat data.txt
a,1,2,3
b,4,5,6
d,7,8,9


$awk -F"," '{print $1"|"$2"|"$3"|"$4}' data.txt
a|1|2|3
b|4|5|6
d|7|8|9

awk   : ​ເອີ້ນ​ໂປ​ຼ​ແກຼມ awk
-F","  : ປະ​ກາດ​ເຄື່ອງໝາຍ​ຂັ້ນ​ຂອງ​ຖັນ ​ໃນ​ນີ້​ແມ່ນ​ເຄື່ອງໝາຍ​ຈຸດ (,)
print  : ຄຳ​ສັ່ງ​​ເພື່ອ​ສະ​ແດງ​ຜົນ​ຢູ່​ໜ້າ​ຈໍ
$1     : ຖັນ​ທີ 1 ​ແລະ​ເຊັ່ນ​ກັນ​ເປັນ​ຖັນ​ທ 2 ​ແລະ 3 ຕາມ​ລຳດັບ ນັບ​ຈາກ​ຊ້າຍ. ຖ້າ​ໃຊ້ $0 ​ແມ່ນ​ພິມ​ທັງ​ແຖວ ຫຼື​ທຸກ​ຖັນ.
"|"      : ພິມ​ເຄື່ອງໝາຍ ( | ) ອອກ. ທຸກ​ຢ່າງ​ຢູ່​ໃນ​ວົງ​ຢືມ​ຄູ່ " " ​ແມ່ນ​ຈະ​ຖືກ​ສະ​ແດງ​ອອກ​ຄື​ກັບ​ທີ່​ມັນ​ຖືກ​ພິມ​ໄວ້.

$awk -F"," '{print $1":"$2":"$4":"$3}' data.txt
a:1:3:2
b:4:6:5
d:7:9:8
  
ສັງ​ເກດ​ຖັນ​ທີ 3 ​ແລະ ຖັນ​ທີ 4 ມີ​ການ​ສະ​ຫຼັບ, ​ເຄື່ອງໝາຍ | ກາຍ​ເປັນ :  . ລອງ​ປ່ຽນ​ໄປ​ເລື້ອຍໆ​ແລະ​ສັງ​ເກດ.

$awk -F"," '{if($2>1) print $1":"$2":"$4":"$3}' data.txt
b:4:6:5
d:7:9:8

$awk -F"," '{if($2<5) print $1":"$2":"$4":"$3}' data.txt
a:1:3:2
b:4:6:5

$awk -F"," '{if(($2>1)&&($2<5)) print $1":"$2":"$4":"$3}' data.txt
b:4:6:5

 ຍັງ​ມີ​ອີກ​ຫຼາຍ​ວິທີ​ທີ່​ເລິກ​ເຊິ່ງ ​ແຕ່​ພໍ​ເທົ່າ​ນີ້​ກ່ອນ ​ເອົາ​ໄວ້​ເຫຼົ່າ​ໃຫ້​ຟັງ​ໃນ​ພາກ 2