複数の列名を編集するには?

複数の列名を編集するには?

次のファイルがあります。

CHROM POS ID A1_FREQ A1 REF DIR P OBS_CT
1 785989 1:785989:T:C 0.152651 T C + 0.152225 1641
1 1130727 1:1130727:A:C 0.0877514 C A - 0.987139 1641
1 1156131 1:1156131:T:C 0.160878 C T - 0.764454 1641
1 1158631 1:1158631:A:G 0.10847 A G + 0.795453 1641

この9つの列名を次の9つの名前に変更したいと思います。

Chr BP Marker MAF A1 A2 Direction pValue N

すべての列はスペースで区切られていることに言及したいと思います。

私はこれを行うことができます:

sed -e '1s/CHROM/Chr/' -e '1s/POS/BP/' ... 

しかし、命令が長すぎます...他の方法はありませんか?

答え1

awk 'NR == 1 { $0 = "Chr BP Marker MAF A1 A2 Direction pValue N" }; 1' file >newfile

awkこれはファイルのヘッダーの代わりにまったく新しいヘッダーを出力するために使用されます。他のすべての行は、元のファイルにあるままになります。newfile結果とともに名前が付けられた新しいファイルが生成されます。

使用sed:

{
    echo 'Chr BP Marker MAF A1 A2 Direction pValue N'
    sed 1d file
} >newfile

これにより、新しいヘッダーが出力され、最初のヘッダーを除いて元のファイルから引き続き行が生成されます。以前と同様に、出力はnewfile

関連情報