ฉันจะผนวกหมายเลขบรรทัดและแท็บต่อท้ายแต่ละบรรทัดของไฟล์ข้อความได้อย่างไร
ฉันจะผนวกหมายเลขบรรทัดและแท็บต่อท้ายแต่ละบรรทัดของไฟล์ข้อความได้อย่างไร
คำตอบ:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'
หรือ
nl
คือผิดเช่นกัน ในซอร์สโค้ดมันจะไม่ให้หมายเลขบรรทัดที่ถูกต้องแก่คุณเนื่องจากจะไม่นับบรรทัดที่มีช่องว่างเท่านั้น
คำสั่ง nl ควรทำเช่นนี้ แต่จะเพิ่มช่องว่างหน้าหมายเลขบรรทัดด้วย มันเป็นส่วนหนึ่งของ coreutils Linux
nl lines.txt
1 $bkWTN
2 $cV8$.
nl
ให้เว้นช่องว่างข้างหน้าหมายเลขนั้นได้ เพียงใช้-w1
ตัวเลือกเพื่อบอกความกว้างขั้นต่ำของตัวเลขคือ 1
-nln
คุณสามารถปรับชิดซ้ายถ้าคุณไม่ต้องการช่องว่างก่อนหมายเลขบรรทัด นอกจากนี้หากต้องการระบุตัวคั่นแท็บคุณสามารถใช้-s$'\t'
หรือ-s' '
(แทรกแท็บระหว่างเครื่องหมายคำพูดเดี่ยวctrl+v
แล้วtab
)
nl -w1
(จาก GNU coreutils 8.24) ไม่ตัดทอนหมายเลขบรรทัด
sed = test.txt | sed 'N;s/\n/\t/'
คำสั่ง "sed =" จะพิมพ์หมายเลขบรรทัดตามด้วยการขึ้นบรรทัดใหม่และบรรทัดถัดไป
นิพจน์ "N; s / \ n / \ t /" จะนำแต่ละบรรทัดรับบรรทัดถัดไป (เช่นหมายเลขบรรทัดและบรรทัด), และแทนที่ carriage return ด้วยแท็บ
\n
เป็นตัวดึงข้อมูลบรรทัด (โดยทั่วไปเรียกว่า "บรรทัดใหม่" เนื่องจากการใช้งานครั้งแรกอย่างแพร่หลายใน Unix) และ\r
เป็นการคืนรถ Windows ใช้\r\n
(เรียกอีกอย่างว่าCRLF
)
cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/"
cat -n เพิ่มผ้าปูที่นอนเป็น "123 linecontents" และที่ regexp ปรับเปลี่ยนเป็น "linenumberTABlinecontents"
perl -pe "s/^/$.\t$_/" file.txt
หรือ
perl -ne "print qq($.\t$_)" file.txt
เกี่ยวกับ
cat -n somefile.txt
?
ตกลงนี่คือโซลูชันทุบตีแบบบรรทัดเดียว:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
การตั้งค่า IFS แรกแจ้งให้ทุบตีเพื่ออ่านบรรทัดเต็มในเวลา บรรทัดที่สองรีเซ็ต IFS เป็นค่าเริ่มต้น
ในฐานะโบนัสที่เพิ่มเข้ามามันจะทำงานอย่างสมบูรณ์ในเชลล์ของคุณและไม่ได้รันโปรแกรม!
ตกลงเนื่องจากเรากำลังรวบรวมวิธีการทำเช่นนี้
grep -n . file.txt | sed 's/\(^[0-9]*\):/\1 /g'
# this is a tab with Ctrl-V + Tab =====> ----
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'
หรือสำหรับผู้ที่ไม่ใช่ GNU sed
:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'