使用粘贴的GUI故障?

时间:2015-04-25 09:31:00

标签: awk paste

这是我的档案:

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列会消失?

我在这里错过了什么吗?

1 个答案:

答案 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,如果它更短,则覆盖其中的一部分。

您可以使用$3fromdosdos2unix等多种工具将文件转换为UNIX行结尾。在awk中即时执行的方法是

recode

样式注释:不要对分隔符进行硬编码,而应考虑使用awk '{ sub(/\r$/, ""); print $2 "\t" $3 "\t" $3 "\t" $1 }' file 特殊变量:

OFS

这使得命令更容易适应,以防您以后想要生成不同的分隔值。