테이블의 특정 위치에 행을 추가하는 방법

테이블의 특정 위치에 행을 추가하는 방법

탭으로 구분된 파일의 헤더 뒤에 테이블에 행을 추가하는 방법은 무엇입니까?

내 입력 파일은 다음과 같습니다.

ID_1     ID_2   v1               C   V3      V4
1878372 2253734 SAMN06396112     20481   NA      DNA                
1884646 2275341 SAMN06432785     20483   NA      DNA     
1860945 2277481 SAMN06407597     20488   NA      DNA 

다음과 같은 원하는 출력을 찾고 있습니다.

ID_1    ID_2     v1              C      V3      V4
   C       C       C               B      B       A
1878372 2253734 SAMN06396112     20481   NA      DNA                
1884646 2275341 SAMN06432785     20483   NA      DNA     
1860945 2277481 SAMN06407597     20488   NA      DNA 

답변1

line='  C       C       C               B      B       A'
sed -e "1a\\
$line" < input.txt 

이는 큰따옴표로 묶인 문자열의 하드 개행 문자입니다. Bash/Ksh/Zsh에서는 다음을 사용할 수 있습니다.

sed -e $'1a\\\n'"$line" < input.txt

추가하려는 줄에 백슬래시가 포함되어 있으면 특별한 처리를 피하기 위해 백슬래시를 두 배로 늘려야 합니다.

답변2

awk변수를 삽입할 문자열로 사용하는 방법은 다음과 같습니다 .

$ foo="C\tC\tC\tB\tB\tA"
$ awk -v s="$foo" 'NR == 2 { print s} { print }' input.txt | column -t
ID_1     ID_2     v1            C      V3  V4
C        C        C             B      B   A
1878372  2253734  SAMN06396112  20481  NA  DNA
1884646  2275341  SAMN06432785  20483  NA  DNA
1860945  2277481  SAMN06407597  20488  NA  DNA

column -t열을 구성하는 데 사용됩니다.

답변3

input.txtline.txt가 각각 추가될 입력 및 행이라고 가정합니다 .

sed -e '1r line.txt' input.txt > output.txt

직접 편집input.txt

printf "%s\n" "1r line.txt" w q | ed input.txt

답변4

사용 awk:

awk 'BEGIN{FS=OFS="\t"; str="C\tC\tC\tB\tB\tA"}NR==1{$0=$0 ORS str}1' input
  • FS=OFS="\t"입력 필드 구분 기호와 출력 필드 구분 기호가 로 설정됩니다 \t.

  • NR==1{$0=$0 ORS str}첫 번째 레코드 뒤에 새 레코드를 추가합니다. $0는 현재 입력 레코드이고 그 뒤에 줄바꿈(기본값 ORS은 이므로 "\n")과 규칙에서 생성한 str레코드 가 차례로 옵니다.BEGIN

  • 1awk인쇄에 사용되는 관용어 입니다 .

관련 정보