テーブル内の特定の場所に行を追加する方法

テーブル内の特定の場所に行を追加する方法

タブ区切りファイルのヘッダーの後にテーブルに行を追加するには?

私の入力ファイルは次のとおりです。

ID_1     ID_2   v1               C   V3      V4
1878372 2253734 SAMN06396112     20481   NA      DNA                
1884646 2275341 SAMN06432785     20483   NA      DNA     
1860945 2277481 SAMN06407597     20488   NA      DNA 

次のような目的の出力を探しています。

ID_1    ID_2     v1              C      V3      V4
   C       C       C               B      B       A
1878372 2253734 SAMN06396112     20481   NA      DNA                
1884646 2275341 SAMN06432785     20483   NA      DNA     
1860945 2277481 SAMN06407597     20488   NA      DNA 

答え1

line='  C       C       C               B      B       A'
sed -e "1a\\
$line" < input.txt 

これは、二重引用符で囲まれた文字列のハード改行文字です。 Bash / Ksh / Zshでは、次のものを使用できます。

sed -e $'1a\\\n'"$line" < input.txt

追加する行にバックスラッシュが含まれている場合は、特別な処理を避けるためにバックスラッシュを2倍にする必要があります。

答え2

awk変数を挿入する文字列として使用する方法は次のとおりです。

$ foo="C\tC\tC\tB\tB\tA"
$ awk -v s="$foo" 'NR == 2 { print s} { print }' input.txt | column -t
ID_1     ID_2     v1            C      V3  V4
C        C        C             B      B   A
1878372  2253734  SAMN06396112  20481  NA  DNA
1884646  2275341  SAMN06432785  20483  NA  DNA
1860945  2277481  SAMN06407597  20488  NA  DNA

column -t列を構成するために使用されます。

答え3

input.txtline.txtがそれぞれ追加される入力と行であるとします。

sed -e '1r line.txt' input.txt > output.txt

直接編集input.txt

printf "%s\n" "1r line.txt" w q | ed input.txt

答え4

使用awk:

awk 'BEGIN{FS=OFS="\t"; str="C\tC\tC\tB\tB\tA"}NR==1{$0=$0 ORS str}1' input
  • FS=OFS="\t"入力フィールド区切り記号と出力フィールド区切り記号がに設定されます\t

  • NR==1{$0=$0 ORS str}最初のレコードの後に​​新しいレコードを追加します。$0は現在の入力レコードで、その後に改行(デフォルトORSはなので"\n")とルールで生成されたstrレコードが順番に続きます。BEGIN

  • 1awk印刷に使用される慣用語です。

関連情報