次の構造のファイルがあります。
GO:0000001 mitochondrion inheritance
GO:0000002 mitochondrial genome maintenance
GO:0000003 reproduction
alt_id: GO:0019952
alt_id: GO:0050876
GO:0000005 obsolete ribosomal chaperone activity
GO:0000006 high-affinity zinc uptake transmembrane transporter activity
GO:0000007 low-affinity zinc ion transmembrane transporter activity
GO:0000008 obsolete thioredoxin
alt_id: GO:0000013
GO:0000009 alpha-1,6-mannosyltransferase activity
それが言うことは、以前のコードを置き換えることをalt_id
意味します。前の定義の定義をGO:
追加したいと思います。つまり、次のような出力が必要です。alt_id
GO:
GO:0000001 mitochondrion inheritance
GO:0000002 mitochondrial genome maintenance
GO:0000003 reproduction
alt_id: GO:0019952 reproduction
alt_id: GO:0050876 reproduction
GO:0000005 obsolete ribosomal chaperone activity
GO:0000006 high-affinity zinc uptake transmembrane transporter activity
GO:0000007 low-affinity zinc ion transmembrane transporter activity
GO:0000008 obsolete thioredoxin
alt_id: GO:0000013 obsolete thioredoxin
GO:0000009 alpha-1,6-mannosyltransferase activity
下の前の行の内容をどのようにコピーできますか? Windowsベースの環境でCygwinを使用しています。
ベストアンサー1
を使用するawk
と、動作するかどうかはわかりません。Cygwin
$ awk '{ if(/^alt_id/){$0 = $0" "p} else{p = ""; for (i=2; i<=NF; i++) p = p" "$i} } 1' ip.txt
GO:0000001 mitochondrion inheritance
GO:0000002 mitochondrial genome maintenance
GO:0000003 reproduction
alt_id: GO:0019952 reproduction
alt_id: GO:0050876 reproduction
GO:0000005 obsolete ribosomal chaperone activity
GO:0000006 high-affinity zinc uptake transmembrane transporter activity
GO:0000007 low-affinity zinc ion transmembrane transporter activity
GO:0000008 obsolete thioredoxin
alt_id: GO:0000013 obsolete thioredoxin
GO:0000009 alpha-1,6-mannosyltransferase activity
alt_id
行の先頭で一致しない行ごとに変数(p
)を使用して、2行で始まるすべての列を格納します。- 行の先頭で行が一致すると、変数に含まれる入力行
alt_id
に変数の内容を追加します。p
$0
- 最後に、
1
コンテンツ印刷のショートカットです。$0