我有以下文件模式:
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 for 循环?或者任何其他解决方案都可以。
答案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
如果您想使用自己的变量代替内置记录计数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
如果您想在其他地方插入新字段,那么一种方法是将其添加到现有字段之前或附加到现有字段,以及附加的输出字段分隔符,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