Làm cách nào để thêm số dòng và tab vào đầu mỗi dòng của tệp văn bản?
Làm cách nào để thêm số dòng và tab vào đầu mỗi dòng của tệp văn bản?
Câu trả lời:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'
.
nl
cũng SAI. Trong mã nguồn, nó sẽ không bao giờ cung cấp cho bạn số dòng đúng, vì nó không đếm các dòng chỉ có khoảng trắng.
Lệnh nl nên làm điều này, nhưng nó cũng thêm không gian trước số dòng. Nó là một phần của lõi Linux.
nl lines.txt
1 $bkWTN
2 $cV8$.
nl
bỏ qua khoảng trắng trước số. Chỉ cần sử dụng -w1
tùy chọn để cho nó biết chiều rộng tối thiểu cho một số là 1.
-nln
bạn có thể chứng minh trái nếu bạn không muốn (các) khoảng trắng trước số dòng. Ngoài ra, để chỉ định dấu phân cách tab bạn có thể sử dụng -s$'\t'
hoặc -s' '
(chèn một tab giữa các dấu ngoặc đơn ctrl+v
sau đó tab
).
nl -w1
(từ GNU coreutils 8.24) không cắt bớt số dòng.
sed = test.txt | sed 'N;s/\n/\t/'
Lệnh "sed =" sẽ in số dòng theo sau là dòng trở lại và sau đó là dòng tiếp theo.
Biểu thức "N; s / \ n / \ t /" sẽ lấy từng dòng, lấy dòng tiếp theo (tức là số dòng và dòng) và thay thế trả về vận chuyển bằng một tab.
\n
là nguồn cấp dữ liệu (thường được gọi là "dòng mới", vì việc sử dụng rộng rãi đầu tiên của nó là trong Unix) và \r
là vận chuyển trở lại. Windows sử dụng \r\n
(còn được gọi là CRLF
).
Làm thế nào về
cat -n somefile.txt
?
OK, đây là một giải pháp bash một dòng:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
Cài đặt IFS đầu tiên cho bash đọc một dòng đầy đủ tại một thời điểm. Dòng thứ hai đặt lại IFS về mặc định.
Là một phần thưởng bổ sung, nó chạy hoàn toàn trong vỏ của bạn và không thực hiện chương trình!
Ok, vì chúng tôi đang thu thập các cách để làm điều này,
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//'
hoặc đối với một số người không phải GNU sed
:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'