他のファイルの内容でsed編集ヘッダー

他のファイルの内容でsed編集ヘッダー

他のファイルの内容に基づいてファイルの既存のヘッダーを置き換えようとしています。

ファイル1 - name.in:

name1
name2
name3
name4
name5

ファイル2 - データfile.tsv:

chr  begin  end  genes  genes genes genes  genes

File2より多くの行が含まれていますが、タイトルが次のようになるように、最初の行の文字列内の各項目を連続genes項目に置き換えたいと思います。file1

chr  begin  end  name1.Corrected  name2.Corrected  name3.Corrected  name4.Corrected name5.Corrected

次のスクリプトを試しました。

genenames=$1 
sed -i -e "1s/\tgenes/\t$genenames\.Corrected/g" Datafile.tsv

しかし、次のように実行すると:

./sed.sh names.in 

私が得た結果は次のとおりです。

chr  begin  end  .in.Corrected  .in.Corrected  .in.Corrected  .in.Corrected  .in.Corrected

スクリプトが入力を読み取らないことがわかります。

ベストアンサー1

努力する

for x in $(<names.in)
do
sed -i -s "s/ genes/ ${x}.Corrected/" Datafile.tsv
done

cat Datafile.tsv

chr  begin  end  name1.Corrected  name2.Corrected name3.Corrected name4.Corrected  name5.Corrected
  • すべてのイベントに適用されるフラグを使用しないでください/g(1つずつ交換したいとき)
  • ' '私のものを交換する'\t'

  • $names.in「名前変数の値」(.inにリンク)に展開され、.inに拡張することもできます。

  • $(< name.in )コマンドが実行される前に、ファイル名.inを読み込み、ファイルの内容に置き換えます。 (行末が白に変わります。)

より包括的なシェル

cat "$1" | while read x
do
sed -i -s "s/ genes/ ${x}.Corrected/" "$2"
done

~と呼ばれる

 myscript.sh names.in  Datafile.tsv

おすすめ記事