这是我的档案:
file.txt的
cg13869341 1 15865
cg24669183 1 534242
cg15560884 1 710097
cg01014490 1 714177
cg17505339 1 720865
cg11954957 1 758829
cg23803172 1 763119
cg16736630 1 779995
cg00168193 1 790667
cg05898754 1 805102
awk '{print $2 "\t" $3 "\t" $3 "\t" $1}' file.txt
输出
1 cg13869341
1 cg24669183
1 cg15560884
1 cg01014490
1 cg17505339
1 cg11954957
1 cg23803172
1 cg16736630
1 cg00168193
1 cg05898754
awk '{print $2 "\t" $3 "\t" $3 "\t" $1}' file.txt | head -1 | tr '\t' '\n'
输出
1
15865
15865
cg13869341
好的,格式本质上是正确的,但输出很奇怪。所以我尝试了别的东西。
awk '{print $1}' file.txt > 1.txt
awk '{print $2}' file.txt > 2.txt
awk '{print $3}' file.txt > 3.txt
paste 2.txt 3.txt 3.txt 1.txt | head
1 cg13869341
1 cg24669183
1 cg15560884
1 cg01014490
1 cg17505339
1 cg11954957
1 cg23803172
1 cg16736630
1 cg00168193
1 cg05898754
粘贴2.txt 3.txt给出预期输出(切到头-2):
1 15865
1 534242
3.txt和1.txt:
15865 cg13869341
534242 cg24669183
那么为什么当我粘贴2.txt 3.txt 3.txt 1.txt时,中间的2列会消失?
我在这里错过了什么吗?
答案 0 :(得分:0)
我可以使用具有Windows行结尾(_click(_span(/Done.*/));
_click(_span(/Done\\[[0-9]\\]/));
_click(_span(/Done\[[0-9]\]/));
_click(_span(/Done/i));
_click(_span("/Done/"));
_click(_span(new Reg Exp("Done\\[[0-9]\\]")));
_click(_span(/Done.*/,_near(_div("addWidgetDone_wrapper[1]"))));
_click(_span(/Done.*/,_near(_div(/addWidgetDone_wrapper\\[[0-9]\\]/))));
_click(_span(/Done.*/,_near(_div(/addWidgetDone_wrapper.*/))));
_click(_span(/Done.*/,_in(_div("addWidgetDone_wrapper[1]"))));
_click(_span(/Done.*/,_in(_div(/addWidgetDone_wrapper/))));
_click(_span(/Done.*/,_in(_div(/addWidgetDone_wrapper.*/))));
而不是\r\n
)的文件重现该行为。在这种情况下,最后一个字段不是\n
而是"15865"
,因此每次打印"15865\r"
时,光标都会移动到行的开头,然后是下一个标签和字段打印。然后,下一个字段将覆盖刚编写的$3
,如果它更短,则覆盖其中的一部分。
您可以使用$3
,fromdos
或dos2unix
等多种工具将文件转换为UNIX行结尾。在awk中即时执行的方法是
recode
样式注释:不要对分隔符进行硬编码,而应考虑使用awk '{ sub(/\r$/, ""); print $2 "\t" $3 "\t" $3 "\t" $1 }' file
特殊变量:
OFS
这使得命令更容易适应,以防您以后想要生成不同的分隔值。