ファイル区切り文字がawkコードで機能しない

ファイル区切り文字がawkコードで機能しない

次のファイルがあります。

Name    Length  EffectiveLength TPM NumReads
ENST00000456328.2|ENSG00000223972.5|OTTHUMG00000000961.2|OTTHUMT00000362751.1|DDX11L1-202|DDX11L1|1657|lncRNA|  1657    1493.961    0.112690    3.673
ENST00000450305.2|ENSG00000223972.5|OTTHUMG00000000961.2|OTTHUMT00000002844.2|DDX11L1-201|DDX11L1|632|transcribed_unprocessed_pseudogene|   632 468.996 0.000000    0.000
ENST00000488147.1|ENSG00000227232.5|OTTHUMG00000000958.1|OTTHUMT00000002839.1|WASH7P-201|WASH7P|1351|unprocessed_pseudogene|    1351    1187.961    9.176212    237.800
ENST00000619216.1|ENSG00000278267.1|-|-|MIR6859-1-201|MIR6859-1|68|miRNA|   68  69.000  0.000000    0.000
ENST00000473358.1|ENSG00000243485.5|OTTHUMG00000000959.2|OTTHUMT00000002840.1|MIR1302-2HG-202|MIR1302-2HG|712|lncRNA|   712 548.982 0.000000    0.000
ENST00000469289.1|ENSG00000243485.5|OTTHUMG00000000959.2|OTTHUMT00000002841.2|MIR1302-2HG-201|MIR1302-2HG|535|lncRNA|   535 372.012 0.000000    0.000

私は出力が次のようになります:

ここに画像の説明を入力してください。

AWKを使って試しました。

awk 'BEGIN { OFS=FS="\t" } { sub("\\..*", "", $1); print }'

最初のID ENSTを印刷します。しかし、私がそれを次のように変更した場合:

awk 'BEGIN { OFS=FS="\t" } { sub("\\..*", "", $5); print }'

何もしません。

だから私は努力しました

awk -F\| '{print $5"\t"$7"\t"$9}'

動作しますが、長さ列が2回生成され、出力ファイルからヘッダーが失われます。

誰でも助けることができますか?

ベストアンサー1

<TAB>別々のファイルの最初の列には常に9つの要素があり(実際には「5つ以上の要素」で十分です)、パイプ()で区切られています(提供された|例の9番目の要素は常に空です)。同じと仮定します。 5番目の要素のみを選択するには、AWKの便利なsplit機能を使用できます。

awk -v FS='\t' -v OFS='\t' \
  'NR > 1 { split($1, t, /\|/); $1 = t[5]; } 1' input_file |
  column -t -R 2,3,4,5

column~からユーティリティLinux次に、パッケージを使用して出力形式をテーブル(-t)として指定し、オプションに右揃えの列-Rリストをカンマ区切りリストとして提供します。

必要に応じて、質問に表示されている出力とより密接に一致するように、フィールドを数値に強制することができます。たとえば、→と→を$5 = $5 + 0取得します。237.800237.80.0000

あるいは、上記の仮定の下で、sub質問に示されている機関ベースのアプローチを拡張しますが、以下が必要です。正確に最初のフィールドの9つ(空のパイプで区切られた要素かもしれません) - AWKスクリプトは次のようになります(他の条件は同じです)。

NR > 1 { gsub(/^([^|]*\|){4,4}|(\|[^|]*){4,4}$/,"",$1); } 1

gsubSubstituteは、2つの一致する部分文字列、つまり最初の4つの区切り要素(アンカーを参照)と最後の4つの要素(アンカーを参照)を削除しようとするためsubに使用されます。|^$

おすすめ記事