複数のパイプされたコマンドの出力であるファイルがあります。このような
command1 input.txt| command2 | command3 | input file
ファイルはタブで区切られています。
コマンド3以降、私の入力ファイルは次のようになります。
chr6 116732135 116741866 116732135 116732368 116741505 116741866 + 0.79 0.51 0.97 0.77 0.48 0.97 0.02 0.37 'chr6:116732136-116732368:+@chr6:116741506-116741866:+.A.withRI','chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.up_chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.dn' (0,0):10,(1,0):147,(1,1):1 0:148 (0,0):36,(1,0):161,(1,1):3 0:163,1:1 chr6 + 116732136,116732136 116741866,116741866 gene_id "ENSG00000196911.10"; transcript_id "ENST00000368564.6"; gene_type "protein_coding"; gene_name "KPNA5"; transcript_type "protein_coding"; transcript_name "KPNA5-202"; level 2; protein_id "ENSP00000357552.1"; transcript_support_level "1"; tag "basic"; tag "appris_principal_1"; tag "CCDS"; ccdsid "CCDS5111.1"; havana_gene "OTTHUMG00000015448.4"; havana_transcript "OTTHUMT00000041967.2";
chr6 116732135 116741866 116732135 116732368 116741505 116741866 + 0.79 0.51 0.97 0.77 0.48 0.97 0.02 0.37 'chr6:116732136-116732368:+@chr6:116741506-116741866:+.A.withRI','chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.up_chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.dn' (0,0):10,(1,0):147,(1,1):1 0:148 (0,0):36,(1,0):161,(1,1):3 0:163,1:1 chr6 + 116732136,116732136 116741866,116741866 gene_id "ENSG00000196911.10"; transcript_id "ENST00000356348.6"; gene_type "protein_coding"; gene_name "KPNA5"; transcript_type "protein_coding"; transcript_name "KPNA5-201"; level 2; protein_id "ENSP00000348704.1"; transcript_support_level "1"; tag "basic"; tag "appris_principal_1"; tag "CCDS"; ccdsid "CCDS5111.1"; havana_gene "OTTHUMG00000015448.4"; havana_transcript "OTTHUMT00000041969.2";
;
コマンド3の後、awkコマンドを使用して、次のコマンドを使用して最後の列を分割しました。
command1 input.txt| command2 | command3 | awk -F "\t" -v OFS="\t" '{split($NF,a,";"); $NF=""; print $0,a[1],a[4]}'
command3からインポートされたファイルの最後のフィールドを分割し、最後のフィールドを除くすべてのフィールドを印刷し、分割フィールドa [1]とa [4]を印刷したいが、これは列1〜25の間にあります。タブ1を追加[1]、1[4]。これをどのように避けることができますか?
ありがとう
これが出力です
chr6 116732135 116741866 116732135 116732368 116741505 116741866 + 0.79 0.51 0.97 0.77 0.48 0.97 0.02 0.37 'chr6:116732136-116732368:+@chr6:116741506-116741866:+.A.withRI','chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.up_chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.dn' (0,0):10,(1,0):147,(1,1):1 0:148 (0,0):36,(1,0):161,(1,1):3 0:163,1:1 chr6 + 116732136,116732136 116741866,116741866 gene_id "ENSG00000196911.10" gene_name "KPNA5"
chr6 116732135 116741866 116732135 116732368 116741505 116741866 + 0.79 0.51 0.97 0.77 0.48 0.97 0.02 0.37 'chr6:116732136-116732368:+@chr6:116741506-116741866:+.A.withRI','chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.up_chr6:116732136-116732368:+@chr6:116741506-116741866:+.B.dn' (0,0):10,(1,0):147,(1,1):1 0:148 (0,0):36,(1,0):161,(1,1):3 0:163,1:1 chr6 + 116732136,116732136 116741866,116741866 gene_id "ENSG00000196911.10" gene_name "KPNA5"
ベストアンサー1
だから与えられた
$ printf 'foo\tbar\ta;b;c;d' |
awk -F "\t" -v OFS="\t" '{split($NF,a,";"); $NF=""; print $0,a[1],a[4]}' | cat -A
foo^Ibar^I^Ia^Id$
(私は視覚化を容易にcat -A
するためにタブを表示しました^I
。)ダブルタブを削除したいですか?
その場合、1つのアプローチは、空のNF
文字列を次に割り当てるのではなく減らすことです$NF
。
$ printf 'foo\tbar\ta;b;c;d' |
awk -F "\t" -v OFS="\t" '{split($NF,a,";"); NF--; print $0,a[1],a[4]}' | cat -A
foo^Ibar^Ia^Id$
別の方法は、文字列をフィールドとして印刷するのではなく、文字列を連結することです。,
文字列間の内容を削除するだけです。
$ printf 'foo\tbar\ta;b;c;d' |
awk -F "\t" -v OFS="\t" '{split($NF,a,";"); $NF=""; print $0 a[1],a[4]}' | cat -A
foo^Ibar^Ia^Id$