PowerShell中如何将冒号分隔的单CSV字段拆分多列并自定义表头
实现方法
下面给出三种常用场景的实现方案:
方案1:awk命令实现(类Unix系统最快方案)
如果你的CSV文件每行就是示例中的冒号分隔格式,直接执行以下命令:
BEGIN { FS=":" printf "%-12s %-3s %-4s %-4s %-12s %-14s %s\n", "USERNAME", "X", "UID", "GID", "DESCRIPTION", "HOMEDIR", "SHELL" print "----------" } { printf "%-12s %-3s %-4s %-4s %-12s %-14s %s\n", $1, $2, $3, $4, $5, $6, $7 }
将上述代码保存为split.awk,运行命令即可得到目标输出:
awk -f split.awk 你的文件路径.csv
如果需要拆分的是CSV中的某一列(比如CSV本身用逗号分隔,要拆分第3列),修改脚本如下:
BEGIN { FS="," printf "%-12s %-3s %-4s %-4s %-12s %-14s %s\n", "USERNAME", "X", "UID", "GID", "DESCRIPTION", "HOMEDIR", "SHELL" print "----------" } { split($3, arr, ":") printf "%-12s %-3s %-4s %-4s %-12s %-14s %s\n", arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7] }
方案2:csvkit实现(专业CSV处理,避免特殊字符出错)
csvkit是专门处理CSV的命令行工具,先安装:
# Debian/Ubuntu apt install csvkit # pip通用安装 pip install csvkit
假设你要拆分的列名为content(替换为你实际的列名),执行命令:
csvcut -c content 你的文件.csv | sed '1d' | awk -F: 'BEGIN{print "USERNAME,X,UID,GID,DESCRIPTION,HOMEDIR,SHELL"} {print $1","$2","$3","$4","$5","$6","$7}' | csvlook
输出直接是对齐的格式化表格。
方案3:Python实现(跨平台通用)
以下脚本可在Windows/Linux/macOS通用:
import csv # 按需修改以下配置 INPUT_CSV_PATH = "你的输入文件.csv" TARGET_COLUMN_INDEX = 2 # 要拆分的列的序号,从0开始计数 OUTPUT_HEADERS = ["USERNAME", "X", "UID", "GID", "DESCRIPTION", "HOMEDIR", "SHELL"] # 打印表头 print("{:<12} {:<3} {:<4} {:<4} {:<12} {:<14} {}".format(*OUTPUT_HEADERS)) print("-" * 10) with open(INPUT_CSV_PATH, "r", encoding="utf-8") as f: reader = csv.reader(f) # 如果原CSV没有表头,注释掉下面这行 next(reader) for row in reader: split_parts = row[TARGET_COLUMN_INDEX].split(":") print("{:<12} {:<3} {:<4} {:<4} {:<12} {:<14} {}".format(*split_parts))
内容的提问来源于stack exchange,提问作者RobJose
相关产品推荐
相关产品推荐

