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投稿の直接コピー - 貼り付けを使用し、ファイルごとにヘッダーが1つだけ設定されているとします。
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