Linux 基础 awk命令求解

/mnt/sdb/share/bin/linux-demo/file4/EG_vs_Amoxicillin.DEG.xls
依次对上述文件进行如下操作

1.把第九列up替换为down, down替换为up

2.替换后把第九列为up的生成一个新的文件,第九列为down的生成一个新文件,两个文件都要含有表头

3.文件第二列和第三列取平均,第四列和第五列取平均,生成一个新文件,
结果参考:/mnt/sdb/share/bin/linux-demo/file4/aver.txt

命令提示: awk

【以下回答由 GPT 生成】

# Step 1: Replacing values in the ninth column
awk 'BEGIN{FS=OFS="\t"} {$9=($9=="up") ? "down" : "up"} 1' /mnt/sdb/share/bin/linux-demo/file4/EG_vs_Amoxicillin.DEG.xls > /mnt/sdb/share/bin/linux-demo/file4/EG_vs_Amoxicillin.DEG_replaced.xls

# Step 2: Creating new files based on the ninth column value
awk 'BEGIN{FS=OFS="\t"} $9=="up" {print > "/mnt/sdb/share/bin/linux-demo/file4/up_file.xls"} $9=="down" {print > "/mnt/sdb/share/bin/linux-demo/file4/down_file.xls"}' /mnt/sdb/share/bin/linux-demo/file4/EG_vs_Amoxicillin.DEG_replaced.xls

# Step 3: Calculating averages and generating a new file
awk 'BEGIN{FS=OFS="\t"} NR==1 {print "GeneName", "Average-Column2-3", "Average-Column4-5"} NR>1 {sum1=$2+$3; sum2=$4+$5; avg1=sum1/2; avg2=sum2/2; print $1, avg1, avg2}' /mnt/sdb/share/bin/linux-demo/file4/EG_vs_Amoxicillin.DEG_replaced.xls > /mnt/sdb/share/bin/linux-demo/file4/aver.txt

请注意,上述命令中使用了"/mnt/sdb/share/bin/linux-demo/file4"作为文件路径,在实际使用时,请根据具体的文件路径进行替换。另外,需要确保文件的权限设置正确,以允许对文件进行读写操作。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^