我有一个如下所示的CSV文件:
Wave 1,bob,IL
Wave 2,julia,CO
Wave 1,mark,WA
Wave 2,fred,AK
我想将其更改为:
Wave 1,bob
Wave 2,julia
Wave 1,mark
Wave 2,fred
我可以使用use cut -d ',' -f 1-2 test.csv
在stdout中生成此结果,但我需要输出到被剪切的同一文件。我尝试了cut -d ',' -f 1-2 test.csv > test.csv
和stdbuf -o0 cut -d ',' -f 1-2 test.csv > test.csv
,但它们都生成了空白的test.csv文件。
如何在每行基础上删除第二个逗号后的所有内容,并将结果写入到位?
答案 0 :(得分:4)
没有任何UNIX工具*进行真正的“inplace”编辑,它们都在幕后使用tmp文件。保持简单:
cut -f1,2 file > tmp && mv tmp file
*例外:ed
使用的内部缓冲区大小与原始文件相同,而不是tmp文件,dd
可用于进行内部编辑,但不适合胆小的人(请参阅{ {3}})。
答案 1 :(得分:2)
如果你有CSS
4.1.0+,那么它支持使用CSS
选项进行就地编辑:
gnu awk
答案 2 :(得分:1)
只是为了记录,这就是你一直在尝试的切割方法:
cut -d, -f1-2 <<<"$(<file1)" >file1
或者
cut -d, -f1-2 file1 |tee file1
答案 3 :(得分:0)
awk '{sub(/,..$/,"")}1' file
Wave 1,bob
Wave 2,julia
Wave 1,mark
Wave 2,fred
答案 4 :(得分:0)
sed 's/,/\n/2;P;d' file
1。 取代第2&#34;,&#34; as&#34; \ n&#34;
2。 使用P打印到第1&#34; \ n&#34;
3。 删除模式空间