![คู่มือฉบับสมบูรณ์สำหรับคำสั่ง "useradd" ใน Linux](/f/6dc02c6d45f4be61a08cc48dec05c3e0.png?width=100&height=100)
คุณเคยอยู่ในสถานการณ์ที่ต้องทำงานกับไฟล์ CSV และสร้างเอาต์พุตในรูปแบบตารางที่มีโครงสร้างหรือไม่? เมื่อเร็ว ๆ นี้ฉันกำลังทำงานกับการล้างข้อมูลในไฟล์ที่ไม่ได้อยู่ในโครงสร้างที่เหมาะสม มันมีช่องว่างมากมายระหว่างแต่ละคอลัมน์ และฉันต้องแปลงเป็นรูปแบบ CSV เพื่อส่งไปยังฐานข้อมูล หลังจากทำความสะอาดและสร้างเอาต์พุตในรูปแบบ CSV แล้ว เอาต์พุตของฉันก็ดูไม่ดึงดูดสายตาเมื่อต้องตรวจสอบความถูกต้องของข้อมูลในไฟล์ CSV นี่คือเวลาที่คำสั่ง "คอลัมน์" มีประโยชน์สำหรับฉัน
ตาม manpage the คอลัมน์ สั่งการ "เรียงตามรายการ”. พูดง่ายๆ ว่า คอลัมน์ เป็นยูทิลิตี้ง่าย ๆ ที่สามารถจัดรูปแบบเอาต์พุตของคุณเป็น a คอลัมน์ รูปแบบ (แถวและฟิลด์) ตามโครงสร้างของไฟล์ต้นฉบับของคุณ NS คอลัมน์ คำสั่งเป็นส่วนหนึ่งของแพ็คเกจ util-linux
จุดสำคัญที่ควรทราบที่นี่คือ คอลัมน์ คำสั่งทำงานแตกต่างกันใน แบบเดเบียน และ Rhel-based distros. เหตุผลก็คือ distro ที่ใช้เดเบียนใช้ “คอลัมน์" จาก bsdmainutils แทน util-linux เวอร์ชันต้นน้ำของ คอลัมน์ คำสั่งใหม่กว่าคำสั่ง bsdmainutils บรรจุุภัณฑ์. ลองดูที่ รายงานข้อผิดพลาด เพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้
$ dpkg -S $ (คอลัมน์ใด)
เพื่อจุดประสงค์ในการสาธิต ฉันใช้ CentOS 7 และจะแสดงตัวเลือกต่างๆ ระหว่าง อูบุนตู และ CentOS 7. เพื่อตรวจสอบ คอลัมน์ รุ่นเรียกใช้คำสั่งต่อไปนี้ คำสั่งนี้จะแสดง .ด้วย util-linux รุ่นแพ็คเกจ
$ column --version # จะไม่ทำงานใน Debian/ubuntu
คุณยังสามารถตรวจสอบเวอร์ชันของ util-linux ได้ด้วยการรันคำสั่งด้านล่าง
$ rpm -qa | grep -i util-linux # Redhat, Centos, Fedora, Amazon Linux $ dpkg -l | grep -i util-linux # อูบุนตู
ก่อนใช้ คอลัมน์ คำสั่งเริ่มต้นที่ดีคือหน้าคู่มือและสำรวจตัวเลือกต่างๆ
คอลัมน์ชาย $
NS คอลัมน์ คำสั่ง can สร้างตารางโดยส่งชื่อไฟล์ เป็นข้อโต้แย้งพร้อมกับ -NS
ธง. ฉันใช้ /etc/passwd เป็นไฟล์อินพุต
$ คอลัมน์ -t /etc/passwd.
เมื่อดูภาพด้านบน คุณอาจคิดว่านี่ไม่ใช่สิ่งที่เราคาดหวังและผลลัพธ์อาจดูแปลก ใช่! คุณพูดถูก คอลัมน์ พิจารณา เว้นวรรคเป็นตัวคั่นเริ่มต้น เมื่อสร้างตาราง ลักษณะการทำงานนี้สามารถแทนที่ได้โดยการส่งผ่านตัวคั่นแบบกำหนดเอง
ตัวคั่นแบบกำหนดเองมีตัวเลือกมากมายให้คุณใช้งาน ในการสร้างตัวคั่นแบบกำหนดเอง ให้ใช้ -NS
ธงตามด้วยตัวคั่น ตอนนี้เราจะใช้ “:”
เป็นตัวคั่นแบ่งออก /etc/passwd ไฟล์.
$ คอลัมน์ -s ":" -t /etc/passwd.
ดูภาพด้านบนที่มีการจัดรูปแบบและโครงสร้างตารางอย่างสวยงาม จาก util-linux รุ่น 2.23 ตัวเลือก -NS
ถูกเปลี่ยนเป็นไม่โลภ
ตอนนี้รันคำสั่งเดียวกันใน อูบุนตู และผลที่ได้จะเป็นความโลภ นี้เป็นเพราะ คอลัมน์ สั่งการ (bsdmainutils) บน อูบุนตู จะถือว่าคำที่อยู่ติดกันหลายคำเป็นคำเดียว
$ คอลัมน์ -s ":" -t /etc/passwd.
เพื่อเอาชนะพฤติกรรมนี้ใช้ -NS
ธง.
$ คอลัมน์ -t -s ":" -n /etc/passwd # บน Debian/Ubuntu เท่านั้น
เมื่อคุณมีบรรทัดว่างในไฟล์อินพุตของคุณ คำสั่งคอลัมน์โดยค่าเริ่มต้นจะไม่สนใจคำสั่งนั้น ดูไฟล์อินพุตของฉันซึ่งอยู่ในรูปแบบ CSV และฉันเพิ่มบรรทัดว่างระหว่างทุกบรรทัด ตอนนี้ มาสร้างตารางเหมือนที่เราเคยทำกับไฟล์อินพุตนี้กัน
$ คอลัมน์ -t -s ";" dummy.txt
จากภาพด้านบนคุณจะเห็นไฟล์อินพุตของฉัน dummy.txt มีบรรทัดว่าง และเมื่อฉันพยายามสร้างตาราง บรรทัดว่างจะถูกละเว้น
บันทึก: นี่เป็นพฤติกรรมเริ่มต้นสำหรับทั้ง “bsdmainutils/util-linux” ตัวแปรของ คอลัมน์ สั่งการ. แต่ คอลัมน์ (bsdmainutils) มีตัวเลือกในการแทนที่พฤติกรรมนี้โดยผ่าน -e
ธง.
$ คอลัมน์ -e -t -s "," dummy.txt # บน Debian/Ubuntu เท่านั้น
จากภาพด้านบน คุณจะเห็นว่าตารางได้รับการจัดรูปแบบอย่างเหมาะสมและไม่มีการละเว้นบรรทัดว่าง
โดยค่าเริ่มต้น ช่องว่างสีขาวสองช่องจะถูกใช้เป็นตัวคั่นเอาต์พุต พฤติกรรมนี้สามารถแทนที่ได้โดยผ่าน -o
ธง. คุณจะไม่มีตัวเลือกตัวคั่นผลลัพธ์ใน คอลัมน์ (bsdmainutils).
$ คอลัมน์ -t -s "," -o "||" dummy.txt # เฉพาะใน distro ที่ใช้ Rhel
ใช้ -NS
ธงที่คุณสามารถแปลงแถวเป็นคอลัมน์ได้ พฤติกรรมนี้เหมือนกันทั้งใน เรล และ อูบุนตู ตัวแปรของคำสั่งคอลัมน์ นี่เป็นคุณสมบัติที่มีประโยชน์มากเมื่อคุณต้องคว้าฟิลด์ใดฟิลด์หนึ่งผ่าน awk หรือคำสั่งคอลัมน์แล้วแปลงเป็นส่วนหัวสำหรับไฟล์ CSV ของคุณ
$ คอลัมน์ -x fillcols.txt
เมื่อคุณเรียกใช้ คอลัมน์ คำสั่งโดยไม่ใช้แฟล็กใด ๆ พฤติกรรมจะเหมือนกับการผ่าน -NS
ธง.
NS คอลัมน์ ใช้ตัวแปรสิ่งแวดล้อม ($คอลัมน์)
เพื่อค้นหาขนาดของเทอร์มินัลของคุณและอิงตามขนาด ให้ใช้ คำสั่งเสียงสะท้อน, ขนาดตารางจะแสดงในเทอร์มินัล
$ echo $COLUMNS.
ลองดูที่ภาพด้านล่าง ตอนแรกฉันปรับขนาดเทอร์มินัลของฉันให้มี $COLUMNS
ขนาดตั้งเป็น 60 และรันคำสั่งคอลัมน์ อีกครั้งฉันปรับขนาดเทอร์มินัลของฉันให้มี $COLUMNS
ขนาดตั้งเป็น 114 และรันคำสั่งคอลัมน์อีกครั้ง คุณจะเห็นความแตกต่างในวิธีที่คอลัมน์พิมพ์ตารางเมื่อเราปรับขนาดเทอร์มินัล
$ คอลัมน์ -t -s ":" /etc/passwd | หัว 5.
เพียงเท่านี้สำหรับบทความนี้ หากคุณมีข้อเสนอแนะใด ๆ โปรดระบุในส่วนความคิดเห็น