如何在文本文件中添加行号和制表符

如何在文本文件中添加行号和制表符

我尝试使用

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

但它确实没有添加制表符,但实际上在行号后面添加了“\t”文本。我正在编辑的文件是一个 CSV 文件,在这里我尝试在开头添加一个带有 id 的新列。

答案1

如果您使用的是 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

相关内容