タブで区切られた列を含むファイルがありますtsv
。スペースで区切られた値を持つ5番目の列を取得したいと思います。区切りスペースをタブ区切りに変換し、新しいファイルとして保存します。
試み:
cut -d"\t" -f"4" input.tsv
awk -v OFS="\t" '$1=$1' input.tsv > output.tsv
入力する:
Composite_Element_REF Gene_Symbol Chromosome Genomic_Coordinate TCGA-KL-8323-01A-21D-2312-05 TCGA-KL-8324-01A-11D-2312-05 TCGA-KL-8325-01A-11D-2312-05
cg00000027 RBL0 14 53468110 0.0545368833399913 0.635089208882213 0.0581022991274144
cg00000028 RBL1 15 53468111 0.0545366588241415 0.635089205024173 0.0581085373336217
cg00000029 RBL2 16 53468112 0.0545366588040571 0.635089205078394 0.0581085373332275
予想出力:
Composite_Element_REF TCGA-KL-8323-01A-21D-2312-05 TCGA-KL-8324-01A-11D-2312-05 TCGA-KL-8325-01A-11D-2312-05
cg00000027 0.0545368833399913 0.635089208882213 0.0581022991274144
cg00000028 0.0545366588241415 0.635089205024173 0.0581085373336217
cg00000029 0.0545366588040571 0.635089205078394 0.0581085373332275
ベストアンサー1
必要なものが、一部の入力ファイルで最初と5番目のタブで区切られたフィールドをインポートしてから、そのフィールドinput.tsv
に含まれるスペースをタブに変更することである場合は、以下をcut
使用してこれを実行できます。tr
cut -f 1,5 input.tsv | tr ' ' '\t' >output.tsv
まず、入力から最初と5番目のフィールドを抽出し、すべての空白文字をタブ文字に変更し、出力をファイルに書き込みます。最初のフィールドが変更されていない場合は、フィールドにスペースが含まれていないと見なされます。
タブはデフォルトの区切り文字であるため、cut
このオプションを使用する必要はありません-d
。
または以下を使用してくださいawk
。
awk 'BEGIN { OFS=FS="\t" }
{
nf = split($5, a, " ")
$0 = $1
for (i = 1; i <= nf; ++i) $(NF+1) = a[i]
print
}' input.tsv >output.tsv
これにより、タブで区切られた5番目のフィールドがスペースに分割され、すべての元のフィールドが最初のフィールドで上書きされます。結果レコードを出力する前に、ループの最初のフィールドの後に分割フィールドを追加します。
Miller(mlr
)を使用すると、入力をヘッドレスTSV(ヘッダーを単にデータとして扱うようにヘッドレス)に読み込み、関心のあるフィールドを切り取り、各レコードを私たちがするように再生成することを選択できますが、よりawk
短いです。
mlr --tsv -N put '$* = {1:$1, 2:splita($5, " ")}' input.tsv >output.tsv
各コマンドの出力は次のようになります。
Composite_Element_REF TCGA-KL-8323-01A-21D-2312-05 TCGA-KL-8324-01A-11D-2312-05 TCGA-KL-8325-01A-11D-2312-05
cg00000027 0.0545368833399913 0.635089208882213 0.0581022991274144
cg00000028 0.0545366588241415 0.635089205024173 0.0581085373336217
cg00000029 0.0545366588040571 0.635089205078394 0.0581085373332275
最初のフィールドにヘッダーが必要であると仮定し、-05
入力の2行目の別のヘッダーは誤っているため、ヘッダー行の最後のフィールドの末尾に追加する必要があることに注意してください。