繁体   English   中英

根据另一列的值逐行修改一列的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM