다음과 같은 데이터 열이 있다고 가정해 보겠습니다.
sample123
sample456
samplexyz
다음을 사용하여 두 개의 새 열을 쉽게 추가할 수 있습니다.
sed -i "s/$/\t1.1\tC/" <file.txt>
그것은:
sample123 1.1 C
sample456 1.1 C
samplexyz 1.1 C
이제 맨 아래에 몇 가지 새로운 데이터를 추가한다고 가정해 보겠습니다.
sample123 1.1 C
sample456 1.1 C
samplexyz 1.1 C
sampleNew1
sampleNew2
sampleNew3
이 데이터의 새 열을 추가하려고 하면 모든 행에 추가되므로 이제 다음을 실행하면 됩니다.
sed -i "s/$/\t1.2\tA/" <file.txt>
다음과 같이 보입니다:
sample123 1.1 C 1.2 A
sample456 1.1 C 1.2 A
samplexyz 1.1 C 1.2 A
sampleNew1 1.2 A
sampleNew2 1.2 A
sampleNew3 1.2 A
첫 번째 열 외에 다른 열이 없는 열을 추가하는 방법은 무엇입니까?
답변1
먼저 현재 줄에 탭 문자가 있는지 테스트하고 그렇지 않은 경우 바꾸십시오.
sed -i '/\t/!s/$/\t1.2\tA/' file
여기서는 탭 문자를 포함하지 않는 모든 줄을 가져와 /\t/!
이 줄에 대체를 적용합니다.
위의 내용은 GNU가 탭 문자를 sed
인식한다고 가정합니다. \t
다른 sed
구현에서는 대신 텍스트 탭을 사용해야 할 수도 있습니다 \t
. 다른 sed
구현에서도 -i
이 옵션을 GNU와 다르게 처리 할 수 있습니다 sed
("sed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?").
사용 awk
:
awk -F "\t" 'BEGIN { OFS=FS } NF == 1 { $2 = "1.2"; $3 = "A" }; 1' file
그러면 탭으로 구분된 필드의 수를 테스트하고 필드가 하나만 있는 경우 줄을 인쇄하기 전에 새로운 두 번째 및 세 번째 필드를 추가합니다.
이는 파일을 현재 위치로 변경하지 않습니다. 이렇게 하려면 awk
다음과 같이 GNU를 사용하십시오.
awk -i inplace -F "\t" 'BEGIN { OFS=FS } NF == 1 { $2 = "1.2"; $3 = "A" }; 1' file
awk
내부 편집 에 대한 자세한 내용은 "awk를 사용하여 파일을 영구적으로 변경하는 방법은 무엇입니까? ("내부" 편집, "sed -i"와 동일)".