탭으로 구분된 파일의 헤더 뒤에 테이블에 행을 추가하는 방법은 무엇입니까?
내 입력 파일은 다음과 같습니다.
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.txt
및 line.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
1
awk
인쇄에 사용되는 관용어 입니다 .