我有一个问题,客户需要在CSV文件中复制一列。这些值将始终相同,很遗憾,我们的API不允许在JSON中指定重复的列。
例如,我具有以下列结构和值:
Name, Surname, City, Age, Job
John, Doe, Johannesburg, 28, Technical Support
Run Code Online (Sandbox Code Playgroud)
现在我需要复制City,所以输出应为:
Name, Surname, City, City Again, Age, Job
John, Doe, Johannesburg, Johannesburg, 28, Technical Support
Run Code Online (Sandbox Code Playgroud)
该列需要放置在将要重复的列之后。该值还取决于此第一列。
awk 可以轻松处理:
awk 'BEGIN{FS=OFS=", "} {$3 = $3 OFS $3} 1' file.csv
Name, Surname, City, City, Age, Job
John, Doe, Johannesburg, Johannesburg, 28, Technical Support
Run Code Online (Sandbox Code Playgroud)
注意,这比单行和短命令执行的操作简单易懂,并且比流水线命令效率更高,流水线命令先调用cut两次然后粘贴。
正如@codeforester在下面正确注释的那样,cut不要在输出中重复一列;它用于剥离值。
假设City始终位于第 3 列,则可以使用剪切和粘贴命令。例如:
csv=path/to/somefile.csv
echo "$(paste -d',' <(cut -d',' -f1-3 $csv) <(cut -d',' -f3- $csv))" > "$csv"
Run Code Online (Sandbox Code Playgroud)
笔记:
path/to/quux.csv分配给变量的部分应csv替换为.csv文件的实际路径。City将写回同一源文件。<(...)部分称为过程替代,通常在无法获取管道数据时使用。可以在这里找到一个很好的解释。