使用awk对第二个值执行操作,仅对具有特定字符串的行执行
嗯。我有这个可以用的。耶使用awk对第二个值执行操作,仅对具有特定字符串的行执行,awk,Awk,嗯。我有这个可以用的。耶 awk '/string/ { print $0 }' file1.csv | awk '$2=$2+(int(rand()*10))' > file2.csv 但我希望文件的上下文也打印到file2.csv中。这个程序只打印包含我的字符串的行,这很好,这是一个开始 我会的,但是,我不能简单地将该操作应用于每行上的$2值,因为不包含我的字符串的行上的$2的值是不可更改的 因此,我希望原始(file1.csv)内容保持不变,唯一的区别是在匹配我的字符串的行上调整值
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
也许是这样的:
$ 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
也许是这样的:
$ 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
您可能还需要在BEGIN块中初始化rand seed,否则您将始终获得相同的rand序列
您可能还需要在BEGIN块中初始化rand seed,否则,您将始终获得相同的rand序列。一个好的开始是显示
file1.csv
中的一些可验证行和预期输出。希望对@JamesBrownA有帮助一个好的开始是显示file1.csv
中的一些可验证行和预期输出。希望这对@JamesBrownsorry有帮助。经过仔细检查,这并没有像我需要的那样起作用。它删除了行中的逗号,并在其他行中添加了一个现金符号。我的错误,已修复。抱歉。经过仔细检查,这并没有像我需要的那样起作用。它删除了行中的逗号,并在其他行中添加了现金符号。我的坏消息,已修复。谢谢。我也意识到了这一点。现在我正在使用:awk-vrnd1=$((随机%10))“$3~/String/{$2=$2+(srand(rnd1))}{print$0}”test.csv
如何保持逗号的完整性?一组与FS相同;检查开始区。谢谢。我也意识到了这一点。现在我正在使用:awk-vrnd1=$((随机%10))“$3~/String/{$2=$2+(srand(rnd1))}{print$0}”test.csv
如何保持逗号的完整性?一组与FS相同;检查开始块。