다음과 같은 데이터 열이 있다고 가정해 보겠습니다.
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
. 다른 구현에서도 GNU와 다르게 옵션을 sed
처리할 수 있습니다 ("-i
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"와 마찬가지로 "in-place" 편집)".