我尝试使用
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