Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用awk对第二个值执行操作,仅对具有特定字符串的行执行_Awk - Fatal编程技术网

使用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相同;检查开始块。