他のファイルの内容に基づいてファイルの既存のヘッダーを置き換えようとしています。
ファイル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