我有这张桌子,
ID ref1 ref2
a 1 3
b 3 1
c 5 1
d 2 4
选项卡分隔,并且有n个ID(a,b,c,..)和引用(ref1,ref2,...等等)。如果大于2,我想用相应的ID替换数字,所以所需的输出将是,
ref1 ref2
b a
c d
我已经为awk
的单列做了事awk -F "\t" '{if($2>2) print $1}' filename
和
awk 'BEGIN{OFS=FS="\t"}$2>2{$2=$1}{print}' filename
但是我不能将它们用于更大的文件。
非常感谢任何帮助,谢谢。
的Vivek
答案 0 :(得分:1)
好尝试!
您只需要遍历Awk
中从$2
到NF
的所有列,即最后一个字段并进行替换,
awk 'BEGIN{FS=OFS="\t"}NR>1{for(i=2;i<=NF;i++) if ($i>2) $i=$1}1' file
NR>1
应跳过处理标题行并保持原样。 {}1
构造相当于用于打印行的始终为真条件,而不是在子句中使用{print}
,在这种情况下,您将打印限制为仅在内部定义的条件{..}
根据OP在评论中的需要,如果应为不匹配的条目更新"NIL"
,请通过
awk 'BEGIN{FS=OFS="\t"}NR>1{for(i=2;i<=NF;i++) if ($i>2) { $i=$1 } else { $i="NIL" } }1'