タブ区切りファイルのヘッダーの後にテーブルに行を追加するには?
私の入力ファイルは次のとおりです。
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.txt
とline.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
1
awk
印刷に使用される慣用語です。