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

새 필드를 다른 곳에 삽입하려는 경우 한 가지 방법은 추가 출력 필드 구분 기호를 사용하여 기존 필드 앞에 추가하거나 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

관련 정보