Shell脚本在第二个逗号后删除所有内容并写入文件?

时间:2017-03-14 21:02:02

标签: regex csv awk sed

我有一个如下所示的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.csvstdbuf -o0 cut -d ',' -f 1-2 test.csv > test.csv,但它们都生成了空白的test.csv文件。

如何在每行基础上删除第二个逗号后的所有内容,并将结果写入到位?

5 个答案:

答案 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。 删除模式空间