파일이 있습니다:
AC AF AN
3 0.375 8
3 0.375 8
내가 원하는 출력은 다음과 같습니다.
AC AF AN
AC=3 AF=0.375 AN=8
AC=3 AF=0.375 AN=8
이를 수행하는 유닉스 명령이 있습니까?
답변1
awk '
NR==1 {split($0,a); $1=$1}
NR>1 {for(i=1;i<=NF;i++) $i=a[i]"="$i}
1' OFS='\t' yourfile
설명하다:
- 첫 번째 레코드(헤더 행)를 기본 필드 구분 기호를 기반으로 배열로 분할하여
$1
레코드가 새 출력 필드 구분 기호로 기록되도록 합니다. - 나머지 레코드의 경우 필드를 반복하고 각 필드 값 앞에 필드 인덱스에 해당하는 배열 요소를 추가한 다음
=
- 탭 문자를 출력 필드 구분 기호로 사용하여 레코드를 인쇄합니다.
답변2
< yourfile \
perl -pale '
$. == 1 and push(@A,@F),next;
$_ = join $", map { "$A[$_]=$F[$_]" } 0..$#F;
' |
column -t
답변3
NR == 1 {
for (i = 1; i <= NF; i++) {
header[i] = $i
printf "%s\t", $i
}
print ""
}
NR > 1 {
for (i = 1; i <= NF; i++) {
printf "%s=%s\t", header[i], $i
}
print ""
}
1. 다음과 같은 파일을 생성합니다.awkprog그리고 위 내용을 붙여넣으세요.
2. 파일 이름이 다음과 같다고 가정합니다.데이터.txt.
3. 그런 다음 실행awk -f awkprog data.txt