기존 열에 단어를 추가하는 방법

기존 열에 단어를 추가하는 방법

10개의 열이 있는 탭으로 구분된 파일이 있고 열 중 하나(약 4천만 행이 있음)에 각 행의 기존 항목 앞에 단어를 추가하고(각 행에 동일한 단어!) 하나를 추가하고 싶습니다. ;입장 후 .

예를 들어 처음 두 줄은

1 2 3 4 5 6 7 8 text still more text in this column 10
1 2 3 4 5 6 7 8 text2 still more text in this column 10

도착하다

1 2 3 4 5 6 7 8 test=text; still more text in this column 10
1 2 3 4 5 6 7 8 test=text2; still more text in this column 10

궁극적으로 이는 Excel의 기본 "연결" 기능이지만 이렇게 큰 파일에는 Excel을 사용할 수 없으며 어쨌든 Linux로 이동해야 합니다.

포럼에서 연결 문제를 조사했지만 두 문자열을 병합하는 것과 관련된 주제만 찾았습니다.

foo="Hello"
foo="$foo World"
echo $foo  

그러나 변수를 사용하지 마십시오.

답변1

이것이 바로awk잘하는 것:

awk -F'\t' -vOFS='\t' '{ $9 = "test=" $9 ";" }1'

-F'\t'탭으로 구분된 필드를 사용하도록 지시합니다. -vOFS='\t'출력에도 탭 문자를 사용하도록 지시합니다. 실제 본문은 마지막 매개변수입니다. 각 행이 (9번째 필드)의 값을 $9"test=", 원래 값 및 ";"의 연결로 변경한다고 말하는 작은 프로그램입니다. 다른 모든 필드는 변경하지 않고 그대로 두고 마지막으로 뭔가를 하더라도 새 줄이 인쇄되도록 1지시합니다 .awk

내가 입력(태그 삽입)을 제공하면 다음과 같습니다.

$ cat data
1   2   3   4   5   6   7   8   text    still more text in this column 10
1   2   3   4   5   6   7   8   text2   still more text in this column 10

그런 다음 위 명령을 실행할 수 있습니다.

$ awk -F'\t' -vOFS='\t' '{ $9="test=" $9 ";" }1' < data
1   2   3   4   5   6   7   8   test=text;  still more text in this column 10
1   2   3   4   5   6   7   8   test=text2; still more text in this column 10

원하는 출력을 얻으십시오. 리디렉션을 사용하여 파일에 저장할 수 있습니다 >.

$ awk -F'\t' -vOFS='\t' '{ $9="test=" $9 ";" }1' < data > processed-data

답변2

GNU 사용 sed:

sed 's/[^\t]*/text=&;/9'

즉, 탭이 아닌 9번째 시퀀스를 text=&;(여기서는 &일치하는 부분을 나타냄)로 대체합니다.

다른 구현을 사용하는 시스템에서는 sed탭 문자를 문자 그대로 입력해야 할 수도 있습니다 \t.

관련 정보