私のコマンドの出力は次のとおりです。
N O D E O U T P U T
THE FOLLOWING TABLE IS PRINTED FOR NODES BELONGING TO NODE SET NSET_OUTPUT
NODE FOOT- NT11
NOTE
3 20.00
11 20.00
1003 23.75
1011 23.75
2003 27.52
2011 27.52
3003 31.30
3011 31.30
4003 35.08
4011 35.08
5003 38.87
5011 38.87
6003 42.67
6011 42.67
7003 46.48
7011 46.48
8003 50.29
8011 50.29
9003 54.12
9011 54.12
10003 57.95
10011 57.95
11003 61.79
11011 61.79
12003 65.64
12011 65.64
13003 69.50
13011 69.50
14003 73.37
14011 73.37
15003 77.25
15011 77.25
16003 81.14
最初の列は常に数値です。私の意図は、2番目の列だけを取得することです。たとえば、次のようになります。
20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
.
.
使う予定です
# gawk -f nset_output.awk electric_thermal.dat
BEGIN{
}
{
if($12~/NSET_OUTPUT/ ){
for(i=1;i <= 5; i++){
getline
}
x=$2
print x >"nset_output.dat"
}
}
ただし、これを行うには出力がめちゃくちゃになります。 (1つの値のみ20.00)20.00
それでは、2番目の列の値を取得する方法は? (私の場合は、405個の値の1列に対応する405個の行があります)
答え1
最初の列の数字を確認するだけで十分だとします。
awk '$1 ~ /[0-9]/ { print $2 }' data.in >data.out
これがこの行以降の行にのみ適用されるようにするには、NSET_OUTPUT
次のようにします。
sed '1,/NSET_OUTPUT/d' data.in | awk '$1 ~ /[0-9]/ { print $2 }' >data.out
これにより、前の行が削除さNSET_OUTPUT
れ、残りの行がawk
スクリプトに送信されます。
スクリプトは数字のみを出力します。各入力ラインについてを探しNSET_OUTPUT
、見つかったら、2番目の列から数字を取得する前に5行をスキップします。
以下は修正版です。あなたのスクリプト:
BEGIN { print_values = 0 }
$12 ~ /NSET_OUTPUT/ {
for (i = 1; i <= 5; i++) {
getline;
}
print_values = 1;
}
print_values == 1 {
x = $2;
print x >"nset_output.dat"
}
答え2
最初のフィールドが数字で始まるかどうかをテストし、2番目のフィールドを印刷できます。
awk '$1 ~ /^[0-9][0-9]*$/ { print $2}' electric_thermal.dat > nset_output.dat
これはソースファイルと一致し、返されます。
20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
....
答え3
awk
あなたの友人です:
awk '$1 ~ /^[[:digit:]]+$/{print $2}' electric_thermal.dat >outfile
これをしなければならない
答え4
各コマンドの実行後も上記の7行がまだ存在する場合は、次のようにします。
yourcommand | sed 1,7d | awk '{print $2}'
sed 1,7d
不要な最初の7行を隠すだけです。awk
あなたが本当に探しているものを正確に整理します。
cat yourcommand_out | sed 1,7d | awk '{print $2}'
20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
35.08
35.08
38.87
38.87
42.67
42.67
46.48
46.48
50.29
50.29
54.12
54.12
57.95
57.95
61.79
61.79
65.64
65.64
69.50
69.50
73.37
73.37
77.25
77.25
81.14