วิธีกำหนดตัวคั่น 'tab' ด้วย 'cut' ใน BASH


215

นี่คือตัวอย่างของการใช้cutเพื่อแบ่งอินพุตลงในฟิลด์โดยใช้ตัวคั่นช่องว่างและการรับฟิลด์ที่สอง:

cut -f2 -d' '

ตัวคั่นสามารถกำหนดเป็นแท็บแทนที่จะเว้นวรรคได้อย่างไร



4
Tab เป็นตัวคั่นเริ่มต้น cut -f 2
Melah

คำตอบ:


301

สองทาง:

กดCtrl+ แล้วVTab

cut -f2 -d'   ' infile

หรือเขียนแบบนี้:

cut -f2 -d$'\t' infile

10
$ '' - bash'ism, AFAIR
poige

8
ไม่ทำงานใน Windows (เช่น Git Bash) อย่างชัดเจน ใช้คำตอบของ @ Mikel ที่นั่น (ตัวคั่นค่าเริ่มต้นคือแท็บเพียงละเว้น-dอาร์กิวเมนต์)
Ahmed Fasih


4
@poige, ที่มาจากการไม่ได้ksh93 bashที่ได้รับการสนับสนุนโดย ksh93, zsh, bash, mksh และ FreeBSD อย่างน้อยที่สุด ( อาจทำให้การพลิกกลับครั้งใหญ่ครั้งต่อไปของข้อกำหนดมาตรฐาน POSIX สำหรับsh )
Stéphane Chazelas

3
@micurb นั่นคือการอ้างอิง ANSI-C: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
wisbucky

191

Tab คือค่าเริ่มต้น

ดูหน้าคนตัด

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

ดังนั้นคุณควรเขียน

cut -f 2

2
อ๊ะไม่ได้สังเกตว่าบรรทัดนั้น
มูฮัมหมัดฮะซันข่าน

4
แต่อาจปลอดภัยกว่าที่จะพูดถึงการตั้งค่าสถานะดังกล่าวอย่างชัดเจนเพื่อความสะดวกในการอ่านและการพกพา ฉันนึกภาพคนที่ออกแบบ a cutสำหรับ Windows จะไม่ทำตามมาตรฐานที่สมบูรณ์
Willem Van Onsem

3
คำตอบนี้ควรได้รับการยอมรับ: รหัสที่ง่ายที่สุดและคำอธิบายที่ง่ายที่สุด ya nailed it: youtube.com/watch?v=dpNTHl7y45Y
neuronet

5
คำตอบนี้เปลี่ยนชีวิตของฉัน
matheeeny

1
@WillemVanOnsem หากมีคนเขียนรุ่นcutสำหรับ Windows และไม่ปฏิบัติตามข้อกำหนด POSIXสำหรับมันไม่มีเหตุผลที่จะถือว่าสคริปต์ POSIX ใด ๆจะทำงานกับระบบนั้น ใช้คุณลักษณะที่ระบุของ POSIX อย่าพยายามอนุญาตให้มีการใช้งานที่ไม่สอดคล้องกับสมมติฐานในอนาคต นั่นไม่ใช่สิ่งที่ "พกพา" หมายถึง
Wildcard

12
awk -F '\t' '{ print $2 }' inputfile

inputfileนี้แยกสองฟิลด์คั่นด้วยแท็บของแต่ละบรรทัดของข้อมูลจาก


10

โดยทั่วไปโดยไม่ต้องใช้ตัวอักษรที่มองไม่เห็น: ใช้trเพื่อแปลงตัวคั่นเป็นรูปแบบที่สามารถระบุได้ง่ายcutขึ้น

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr เป็นเครื่องมือจับคู่และแทนที่ตัวอักษรที่เรียบง่าย แต่ทรงพลัง


1
แต่ถ้าอินพุตเป็นabc(space)def(tab)ghiอย่างไร คำตอบของคุณจะให้ผลผลิตแต่มันควรจะให้ผลผลิตdef ghiในทำนองเดียวกันถ้าใส่เป็นABC(tab)DEF(space)GHIคำตอบของคุณจะให้ผลผลิตแต่มันควรจะให้ผลผลิตDEF DEF(space)GHI
G-Man

@ G-Man: ตัวคั่นพื้นที่เป็นเพียงตัวอย่าง ใช้ตัวคั่นใดก็ได้ที่เหมาะสมกับข้อมูลของคุณเช่นเครื่องหมายจุลภาค echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar

... แต่ใช่ถ้าตัวคั่นต้องเป็นแท็บแนวทางของฉันจะไม่ทำงาน
nobar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.