私のファイルpheno_Mt.txtは次のようになります:
IID pheno
1000017 -9
1000025 -9
1000038 1
1000042 -9
1000056 -9
だから、スペースで区切られているので、タブで区切って変換したいです。
私は試した:
cat pheno_Mt.txt | tr ' ' '\t' > pheno_Mtt.txt
これ:
sed 's/ /\t/g' pheno_Mt.txt > pheno_Mtt.txt
しかし、これは最初の行だけタブで区切られ、残りは空白で区切られます。
私がこれを実行しているコンピュータは次のとおりです。
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
od -c pheno_Mt.txt > outt
head outt
0000000 I I D p h e n o \n 1 0 0 0 0 1
0000020 7 - 9 \n 1 0 0 0 0 2 5 - 9 \n
0000040 1 0 0 0 0 3 8 1 \n 1 0 0 0 0 4
0000060 2 - 9 \n 1 0 0 0 0 5 6 - 9 \n
0000100 1 0 0 0 0 7 4 - 9 \n 1 0 0 0 0
0000120 8 9 - 9 \n 1 0 0 0 0 9 3 1 \n
0000140 1 0 0 0 1 0 8 - 9 \n 1 0 0 0 1
0000160 1 5 - 9 \n 1 0 0 0 1 2 7 2 \n
0000200 1 0 0 0 1 3 0 - 9 \n 1 0 0 0 1
0000220 4 9 - 9 \n 1 0 0 0 1 5 1 - 9
od -c pheno_Mtt.txt > outtt
head outtt
0000000 I I D \t p h e n o \n 1 0 0 0 0 1
0000020 7 \t - 9 \n 1 0 0 0 0 2 5 \t - 9 \n
0000040 1 0 0 0 0 3 8 \t 1 \n 1 0 0 0 0 4
0000060 2 \t - 9 \n 1 0 0 0 0 5 6 \t - 9 \n
0000100 1 0 0 0 0 7 4 \t - 9 \n 1 0 0 0 0
0000120 8 9 \t - 9 \n 1 0 0 0 0 9 3 \t 1 \n
0000140 1 0 0 0 1 0 8 \t - 9 \n 1 0 0 0 1
0000160 1 5 \t - 9 \n 1 0 0 0 1 2 7 \t 2 \n
0000200 1 0 0 0 1 3 0 \t - 9 \n 1 0 0 0 1
0000220 4 9 \t - 9 \n 1 0 0 0 1 5 1 \t - 9
ベストアンサー1
$ tr ' ' '\t' <pheno_Mt.txt
IID pheno
1000017 -9
1000025 -9
1000038 1
1000042 -9
1000056 -9
これそうだこれはtr
コマンドがファイルの最初の行にのみ行ったのと同じですが、タブの出力によりカーソルが画面の次の8の倍数に移動し、その位置が7文字の数字の後に1つの空白になるため、効果は他の行のタブですです現れるちょうどスペース。
しかし、これを行うもう1つの方法は、元のファイルで使用されているスペースの数に依存しないことです。
$ awk -v OFS='\t' '{ print $1, $2 }' pheno_Mt.txt
IID pheno
1000017 -9
1000025 -9
1000038 1
1000042 -9
1000056 -9
awk
これは、スペースで区切られた入力から読み取られた2つのタブで区切られた列を出力するために使用されます。
または、必要な数の列について
$ awk -v OFS='\t' '{ $1=$1; print }' pheno_Mt.txt
IID pheno
1000017 -9
1000025 -9
1000038 1
1000042 -9
1000056 -9
これにより、awk
最初のフィールドを変更してレコード全体が再編成されます。一般形式は、print
タブ文字を区切り文字として使用してレコードを印刷します。