次のファイルスキーマがあります。
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