如何重定向输出以更改特定的 csv 列并写入同一文件。逻辑上:awk 'BEGIN{FS=OFS=","} { = } 1' a.csv > toSameFile

How to redirect output for change specific csv column and write into same file. Logically: awk 'BEGIN{FS=OFS=","} {$19 = $1} 1' a.csv > toSameFile

我需要更改我的 csv 文件中的特定列,awk 命令正在执行我的工作。

awk 'BEGIN{FS=OFS=","} { = } 1' a.csv

但它会打印结果,我需要将其保存到同一个文件中以便稍后使用该文件。

我尝试过的:

awk 'BEGIN{FS=OFS=","} { = } 1' a.csv > a.csv 但它删除了所有内容。

GNU awk:

awk -i inplace 'BEGIN{FS=OFS=","} { = } 1' a.csv > a.csv

任意 awk:

tmp=$(mktemp) &&
awk 'BEGIN{FS=OFS=","} { = } 1' a.csv > "$tmp" &&
mv -- "$tmp" a.csv

后者适用于任何命令。你不能只做 cmd file > file 因为你的 shell 可以先做 > file 部分来初始化输出文件,然后当它尝试 运行 时 cmd file如您所见,file 部分已经为空。需要 &&s 以确保当前步骤在执行下一步之前成功,否则如果 mktempawk 对某些文件失败,您可能最终会切换输入文件并丢失其所有内容原因。