他の列(この簡単な例では3つの列)を含むファイルがあります。これらの行には、さまざまなレプリケーション(Replicate_A、Replicate_B、Replicate_C)のデータが含まれます。ただし、毎回コピーされる行数は同じではありません(例:3、4、5行)。私が知っている唯一のことは、各反復が数字1で始まるということです。名前が重複する追加の列を追加したいと思います。この列を追加する方法について提案がありますか? [追加]列に追加する名前のリストを含む追加ファイルを作成できます。どんなアドバイスでも役に立ちます。
私のファイルはタブ区切りのファイルです。
1 x x
2 x x
3 x x
4 x x
1 x x
2 x x
3 x x
1 x x
2 x x
3 x x
欲しいファイル
1 x x Replicate_A
2 x x Replicate_A
3 x x Replicate_A
4 x x Replicate_A
1 x x Replicate_B
2 x x Replicate_B
3 x x Replicate_B
1 x x Replicate_C
2 x x Replicate_C
3 x x Replicate_C
ベストアンサー1
AWKを使用し、追加する名前をリストする別々のファイルを使用してください。
#!/usr/bin/awk -f
BEGIN { FS = "\t"; OFS = FS; idx = 0 }
FNR == NR { names[NR] = $0 }
FNR < NR && $1 == 1 { idx++ }
FNR < NR { $(NF + 1) = names[idx]; print }
これは、タブを入力と出力のフィールド区切り文字として使用するようにAWKを設定します。最初のファイルに追加する名前が含まれているとします。これはnames
配列として読み込まれます。最初のファイルの後のファイルに移動すると、最初のフィールドが1であることを確認してから、配列インデックスを増やした後、行の末尾に現在の名前を追加します。
別の名前のリストはありません。
#!/usr/bin/awk -f
BEGIN { FS = "\t"; OFS = FS; idx = 0 }
$1 == 1 { idx++ }
{ $(NF + 1) = sprintf("Replicate_%c", 64 + idx); print }
どちらの場合もエラー処理はありません。最初のバリアントでは、名前がすべて消費されると空の文字列が使用されます。パート2では、Z以降の文字セットを調べます。