Text-Processing

如何將行號添加到文本文件中

  • February 9, 2015

我嘗試使用

nl -ba -s '\t' full_media > full_media2

但它確實沒有添加選項卡,而是在行號後面添加了“\t”文本。我正在編輯的文件是一個 CSV 文件,在這裡我試圖在 id 開頭添加一個新列。

如果您使用的是 bash 或 zsh 等現代 shell,請使用$以便 shell 評估\t並用實際選項卡替換它:

nl -ba -s $'\t' full_media > full_media2

即便如此,如果您檢查輸出,看起來預設分隔符是一個製表符:

$ nl -ba -s $'\t' ~/at.sh | od -c
0000000                       1  \t   n   o   h   u   p       s   g    
$ nl -ba  ~/at.sh | od -c        
0000000                       1  \t   n   o   h   u   p       s   g    

事實上,預設分隔符是製表符,由 POSIX 指定。來自man nl

  -s  sep
         Specify  the  characters  used in separating the line number and
         the corresponding text line. The default sep shall be a <tab>.

要將列添加到 CSV,請嘗試使用 Python:

#! /usr/bin/env python2

from sys import stdin, stdout
import csv

csvin = csv.reader(stdin, delimiter='\t')
csvout= csv.writer(stdout, delimiter='\t')
count = 1

for row in csvin:
   csvout.writerow ([count] + row)
   count = count + 1

將其保存為腳本(例如nl.py)並執行:

python2 nl.py < full_media > full_media2

引用自:https://unix.stackexchange.com/questions/183764