txt 파일의 헤더에서 일부 값을 가져와 파일에 따라 행 수가 달라지는 열에 복사해야 합니다. 여기에 예가 있습니다.
입력 파일:
PROJECT : PRK33
X_COR : 258524
Y_COR : 225898
DATUM : 874
DEPTH TIME
0 0
1 7
2 16
3 20
결과물 파일:
0 0 258524 225898 874
1 7 258524 225898 874
2 16 258524 225898 874
3 20 258524 225898 874
답변1
헤더가 제공한 것과 정확히 동일하고 데이터가 행 8에서 시작한다는 가정을 기반으로 하는 가능한 간단한 접근 방식은 다음과 같습니다.
- 해당 값을 유지하면서 관심 있는 헤더 행과 일치시킵니다.
첫 번째 데이터 행부터 시작하여 멋진 형식을 사용하여 출력에 값을 추가합니다.
awk -F":" '/^X_COR/ { x=$2 } ; /^Y_COR/ { y=$2 } ; /^DATUM/ { d=$2 } ;NR>7 { 인쇄 sprintf("%-20s %- 10d %-10d %-10d",$0,x,y,d) }' YourInputFile
예제와 다른 경우 줄 번호와 형식을 조정해야 할 수도 있습니다.
답변2
OP 게시물의 직접 복사-붙여넣기를 사용하고 파일당 헤더가 하나만 설정되어 있다고 가정합니다.
awk -F":" '$2+0{a=a"\t"$2}$1~/[^0-9. ]+$/{print $0a}' file1
0 0 258524 225898 874
1 7 258524 225898 874
2 16 258524 225898 874
3 20 258524 225898 874
방해하다:
$2
숫자이면 true 이고 $2+0
x, y 또는 z이므로 문자열로 결합합니다.
그렇지 않고 $1
숫자가 포함되어 있으면 $1~/^[0-9. ]+$/
데이터이므로 다음으로 구성된 문자열과 함께 인쇄합니다.
답변3
$ awk 'NR>1 && NR<5{h=h OFS $NF} NR>7{print $0 h}' file
0 0 258524 225898 874
1 7 258524 225898 874
2 16 258524 225898 874
3 20 258524 225898 874
또는 이는 원하는 작업과 더 유사할 수 있습니다. 예를 들어 헤더가 다른 입력 순서를 취할 수 있지만 특정 출력 순서를 적용하려는 경우:
$ awk '/:/{f[$1]=$NF} NR>7{print $0, f["X_COR"], f["Y_COR"], f["DATUM"]}' file
0 0 258524 225898 874
1 7 258524 225898 874
2 16 258524 225898 874
3 20 258524 225898 874