スペースで区切られたファイルをタブ区切りのファイルに変換するには? [閉鎖]

スペースで区切られたファイルをタブ区切りのファイルに変換するには? [閉鎖]

私のファイル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タブ文字を区切り文字として使用してレコードを印刷します。

おすすめ記事