AWKを使用して列を追加する方法

AWKを使用して列を追加する方法

次のファイルスキーマがあります。

insert_buffer cell_a 
insert_buffer cell_b
insert_buffer cell_b
...

各行の最後に列を追加して数字を増やしたいです。たとえば、0,1,2,3...:

insert_buffer cell_a name_0
insert_buffer cell_b name_1
insert_buffer cell_b name_2
...

ループにawkを使用する方法は?あるいは、他の解決策も可能です。

答え1

$ awk '{$(NF+1) = "name_"(NR-1)} 1' file
insert_buffer cell_a name_0
insert_buffer cell_b name_1
insert_buffer cell_b name_2

組み込みレコード count の代わりに独自の変数を使用するには、NR次のようにします。

$ awk '{$(NF+1) = "name_"i++} 1' file
insert_buffer cell_a name_0
insert_buffer cell_b name_1
insert_buffer cell_b name_2

新しいフィールドを別の場所に挿入する場合は、追加の出力フィールド区切り文字を使用して既存のフィールドの前に追加するか、2番目のフィールドOFSの前に挿入する方法があります。

$ awk '{$2 = "name_"i++ OFS $2 } 1' file
insert_buffer name_0 cell_a
insert_buffer name_1 cell_b
insert_buffer name_2 cell_b

答え2

これは与えられたエディタを使って行うことができますsed

sed算術概念がないので、他の方法で計算できます。

the variable $n stores the column number where you want the new data placed.

n=2;
sed -ne 1i\\ -e 0 -e p\;= yourfile |\
sed -nE "N;s/\S\+/&\n/$n;s/\(.*\)\n\(.*\)\n/\2 name_\1 /p"

結果

insert_buffer name_0  cell_a
insert_buffer name_1  cell_b
insert_buffer name_2  cell_c

関連情報