在bash中修改.txt文件中的行
我有一个.txt文件,其中包含行,这些行依次用“,”分隔,例如:在bash中修改.txt文件中的行,bash,awk,sed,Bash,Awk,Sed,我有一个.txt文件,其中包含行,这些行依次用“,”分隔,例如: 10,05,nov,2016,122,2,2,330,user 我想要的是能够修改X线的参数,搜索方法是第一个数字,它是唯一的,不会重复。 例如,查找数字10(f1)并修改包含122(f5)的行。 我用sed试过了,但做不到。 我评论说,使用awk我可以,但我没有研究这个命令。 一些帮助???一个简单的awk脚本,如以下所示,应该可以做到这一点: awk -v find="10" -v field="5" -v newval="
10,05,nov,2016,122,2,2,330,user
我想要的是能够修改X线的参数,搜索方法是第一个数字,它是唯一的,不会重复。
例如,查找数字10(f1)并修改包含122(f5)的行。
我用sed
试过了,但做不到。
我评论说,使用awk
我可以,但我没有研究这个命令。
一些帮助???一个简单的awk脚本,如以下所示,应该可以做到这一点:
awk -v find="10" -v field="5" -v newval="abcd" 'BEGIN {FS=OFS=","} {if ($1 == find) $field=newval; print $0}' test.csv
说明:
:为awk定义3个变量<代码>查找,其中包含我们正在查找的模式,awk-v find=“10”-v field=“5”-v newval=“abcd”
,其中包含我们要编辑的字段的编号,以及带有要替换的值的字段
newval
:在遍历文件之前,我们将文件分隔符和输出文件分隔符设置为“,”BEGIN{FS=OFS=“,”}
:如果行的第一个字段包含我们想要的模式,我们将第n个字段(第一个字段是if($1==find)$field=newval
,第二个字段是$field=1
,…)设置为$field=2
newval
:无论if测试结果如何,我们都会打印整行print$0
awk -v a="10" -v f="5" -v n="abcd" -F, '$1 == a {$f=n}OFS=FS' test.csv
其中a
指find
,f
指字段
,n
指newval
,-f,
指FS=“,”
正在运行的脚本:
> cat test.csv
11,05,nov,2016,122,2,2,330,user
10,05,nov,2016,123,2,2,330,user
12,05,nov,2016,124,2,2,330,user
> awk -v find="10" -v field="5" -v newval="abcd" 'BEGIN {FS=OFS=","} {if ($1 == find) $field=newval; print $0}' test.csv
11,05,nov,2016,122,2,2,330,user
10,05,nov,2016,abcd,2,2,330,user
12,05,nov,2016,124,2,2,330,user
对于sed:
$ sed '/^10/s/,[^,]*/,333/4' <<< "10,05,nov,2016,122,2,2,330,user"
10,05,nov,2016,333,2,2,330,user
$sed'/^10/s/,[^,]*/,333/4'请将该示例输入的所需输出添加到您的问题中。欢迎使用堆栈溢出!请出示你的问题。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。你也应该阅读。