열이 하나만 있는 경우 파일에 열을 추가하는 방법(가급적 sed -i 사용)은 무엇입니까?

열이 하나만 있는 경우 파일에 열을 추가하는 방법(가급적 sed -i 사용)은 무엇입니까?

다음과 같은 데이터 열이 있다고 가정해 보겠습니다.

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처리할 수 있습니다 ("-isedsed -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" 편집)".

관련 정보