确定。我有这个有效。耶!
awk '/string/ { print $0 }' file1.csv | awk '$2=$2+(int(rand()*10))' > file2.csv
但我希望我的文件的上下文也打印到file2.csv中。这个程序只打印包含我的字符串的行,这很好,这是一个开始。
我会,但是,我不能简单地将操作应用于每一行的$ 2值,因为不包含我的字符串的行上$ 2的值不会被更改。
所以,我希望原始(file1.csv)内容完好无损,唯一的区别是匹配我的字符串的行的调整值为$ 2。
有人能帮帮我吗?谢谢。以下是来自原始csv 的4行:
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30720, String, 0, 76, 100
2, 32620, String, 0, 76, 0
预期输出除了$ 2的小变化之外是相同的:
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30725, String, 0, 76, 100
2, 32621, String, 0, 76, 0
答案 0 :(得分:2)
$ awk 'BEGIN{FS=OFS=", "} /String/{$2+=int(rand()*10)}1' file
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30722, String, 0, 76, 100
2, 32622, String, 0, 76, 0
您可能还需要在BEGIN块中初始化rand种子,否则您将始终获得相同的rand序列。
答案 1 :(得分:1)
像这样的东西,也许:
$ awk -F", " -v OFS=", " '$3 ~ /String/ { $2=$2+(int(rand()*10))} { print $0 }' file1.csv
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30722, String, 0, 76, 100
2, 32622, String, 0, 76, 0