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
.