awk - GUI glitch using paste? -
this file:
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
output
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'
output
1 15865 15865 cg13869341
ok, format inherently correct, output strange. try else.
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
pasting 2.txt 3.txt gives expected output (cut head -2):
1 15865 1 534242
as 3.txt , 1.txt:
15865 cg13869341 534242 cg24669183
so why when paste 2.txt 3.txt 3.txt 1.txt, middle 2 columns disappear?
am missing here?
i can reproduce behavior file has windows line endings (\r\n
instead of \n
). in case, last field not "15865"
"15865\r"
, every time $3
printed, cursor moved beginning of line before next tab , field printed. next field overwrites written $3
, or part of if shorter.
you can convert file unix line endings number of tools such fromdos
, dos2unix
or recode
. way on fly in awk is
awk '{ sub(/\r$/, ""); print $2 "\t" $3 "\t" $3 "\t" $1 }' file
style note: instead of hard-coding separator, consider using ofs
special variable:
awk -v ofs='\t' '{ sub(/\r$/, ""); print $2, $3, $3, $1 }' file
that makes command easier adapt in case want generate differently separated values later.
Comments
Post a Comment