仅交换 bash 中某些行的列
Swapping columns of only some lines in bash
我有一个文件,其列按一种逻辑在上半部分排序,另一种逻辑在下半部分排序,例如
first half
locus_1 M1 -7.0056323 1 Locus_1 0.004335 1 M3
locus_2 - 3.4194853 1 Locus_2 0.148344 1 M2
locus_3 M5 -2.1111424 1 Locus_3 0.329310 1 M1
second half
locus_4 -4.2389254 1 - Locus_4 0.3219294 1 S2
locus_5 -18.1941031 1 x Locus_5 0.0008329 1 M2
locus_6 13.0201291 1 M4 Locus_6 0.0181229 1 -
我想打印前半部分, , , , , , ,
,后半部分只打印[=12=]
,以便它们具有相同的顺序。
上半部分的 $2 列/第二部分的 $4 列可以包含“-”、“x”、“M[1-5]”或“S[1-5]”,而$3 上半场/$2 下半场的数字可以是正数也可以是负数。
我想用 awk
做一些 for
循环,但我无法成功...我使用 cygwin,如果它有用的话。
link 对于 Awk 内置变量:
#!/bin/awk -f
{
if( NR<4 ){
print " " " " " " " " " " " " " "
}
else{
print [=10=]
}
}
我有一个文件,其列按一种逻辑在上半部分排序,另一种逻辑在下半部分排序,例如
first half
locus_1 M1 -7.0056323 1 Locus_1 0.004335 1 M3
locus_2 - 3.4194853 1 Locus_2 0.148344 1 M2
locus_3 M5 -2.1111424 1 Locus_3 0.329310 1 M1
second half
locus_4 -4.2389254 1 - Locus_4 0.3219294 1 S2
locus_5 -18.1941031 1 x Locus_5 0.0008329 1 M2
locus_6 13.0201291 1 M4 Locus_6 0.0181229 1 -
我想打印前半部分, , , , , , ,
,后半部分只打印[=12=]
,以便它们具有相同的顺序。
上半部分的 $2 列/第二部分的 $4 列可以包含“-”、“x”、“M[1-5]”或“S[1-5]”,而$3 上半场/$2 下半场的数字可以是正数也可以是负数。
我想用 awk
做一些 for
循环,但我无法成功...我使用 cygwin,如果它有用的话。
link 对于 Awk 内置变量:
#!/bin/awk -f
{
if( NR<4 ){
print " " " " " " " " " " " " " "
}
else{
print [=10=]
}
}