我有一个 5 列文件:
PS 6 15 0 1
PS 1 17 0 1
PS 4 18 0 1
我想以这种 7 列格式获取它:
PS.15 PS 6 N 1 0 1
PS.17 PS 1 P 1 0 1
PS.18 PS 4 N 1 0 1
要创建 7 列中的 6 列,只需从原始文件中的列中直接抓取(有时应用小算术)。但是,要创建一列(第 4 列)需要使用 if-else 语句。
具体来说,要创建新的第 1、2、3 列,我使用:
cat File | awk '{print $1"."$3"\t"$1"\t"$2}'
并创建新的第 5、6、7 列,我使用:
cat testFileB | awk '{print $4+$5"\t"$4/($4+$5)"\t"$5/($4+$5)}'
并创建新的第 4 列,我使用:
cat testFileB | awk '{if ($2 == 1 || $2 == 2 || $2 == 3) print "P"; else print "N";}'
这三个语句可以独立工作并得到我想要的(所有由制表符分隔的列的正确值)。但是,当我尝试同时应用它们(一次创建所有 7 列)时,我只能在第 4 列(if/else 语句列)之前和之后使用不需要的新行(而不是制表符):
例如,我尝试同时创建第 1、2、3、4 列:
cat File | awk '{print $1"."$3"\t"$1"\t"$2; if ($2 == 1 || $2 == 2 || $2 == 3) print "P"; else print "N";}'
在第 4 列之前产生不需要的新行:
PS.15 PS 6
N
PS.17 PS 1
P
PS.18 PS 4
同样,我尝试同时创建第 4、5、6、7 列:
cat File | awk '{if ($2 == 1 || $2 == 2 || $2 == 3) print "P"; else print "N"; print $4+$5"\t"$4/($4+$5)"\t"$5/($4+$5)}'
在第 4 列之后产生不需要的新行:
N
1 0 1
P
1 0 1
N
1 0 1
有没有一种解决方案可以让我一次创建所有 7 列,并且它们之间只有选项卡(没有新行)?