[英]Modify values of one column based on values of another column on a line-by-line basis
我正在寻找使用 bash/awk/sed 来修改文档。
该文档包含多个列。 当前,第 5 列的每一行都具有值“A”。 第六列由递增的数字组成。 我正在尝试一个逐行浏览文档的脚本,检查第 6 列的值,如果该值大于某个 integer(特别是 275),则同一行中第 5 列的值更改为“B” .
while IFS="" read -r line ; do
awk 'BEGIN {FS = " "}'
Num=$(awk '{print $6}' original.txt)
if [ $Num > 275 ] ; then
awk '{ gsub("A","B",$5) }'
fi
done < original.txt >> edited.txt
对于上面的内容,我尝试在 while 循环的内部和外部设置 residueNum 变量。
我也尝试过使用 for 循环和 cat:
awk 'BEGIN {FS = " "}' original.txt
Num=$(awk '{print $6}' heterodimer_P49913/unrelaxed_model_1.pdb)
integer=275
for data in $Num ; do
if [ $data > $integer ] ; then
##Change value in other column to "B" for all lines containing column 6 values greater than "integer"
fi
done
提前致谢。
GNU AWK
不需要外部 while 循环(有隐式循环),如果您需要进一步解释,请阅读awk
信息页。 让file.txt
内容为
1 2 3 4 A 100
1 2 3 4 A 275
1 2 3 4 A 300
和任务是
检查第 6 列的值,如果该值大于某个 integer(特别是 275),则同一行中第 5 列的值更改为“B”。
然后可以使用 GNU AWK
按照以下方式完成
awk '$6>275{$5="B"}{print}' file.txt
这给出了 output
1 2 3 4 A 100
1 2 3 4 A 275
1 2 3 4 B 300
解释:将第 5 个字段 ( $5
) 的操作集值 B 有条件地应用于第 6 个字段的值大于 275 的行。要print
的操作无条件地应用于所有行。 如果在print
ing 之前完成应用,请观察更改。
(在 GNU Awk 5.0.1 中测试)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.