すべての列に行があるわけではないため、列の抽出に問題があります。
写真を見てください:
http://www.dodaj.rs/f/1F/Fw/1dAklQ4M/snap008.jpg
たとえば、列をリストしたい:
"Label" #2 #6 #sum of #2 and #6
最後の列で並べ替えたいのですが、#2 と #6 の #sum です
どうやってやるの?どうも
すべての列に行があるわけではないため、列の抽出に問題があります。
写真を見てください:
http://www.dodaj.rs/f/1F/Fw/1dAklQ4M/snap008.jpg
たとえば、列をリストしたい:
"Label" #2 #6 #sum of #2 and #6
最後の列で並べ替えたいのですが、#2 と #6 の #sum です
どうやってやるの?どうも
仮定: 1. #1 から始まる数字は常に存在します。2. 前の列に番号が記載されていません。3. 1 番目と 2 番目のフィールドが空にならないこと。
最初の桁を探して、そこから開始できます。
awk '{
# Look for the first digit
for( I=1 ; I<=NF ; I++ ) { if ( $I ~ /^[[:digit:]]+$/ ) { break } }
# Print the necessary fields
print $2, $(I+1), $(I+5), $(I)+$(I+5)
}' my_file
Gawk を使用すると、固定幅の列を使用してデータを読み取ることができます。
gawk -v FIELDWIDTHS="9 13 16 9 11 11 7 6 6 6 6 10 6 6 6 10 10" '{
print $2, $9, $13, $9 + $13
}'
スクリーンショットから列幅を推測しただけであることに注意してください。幅を調整する必要があります。
無視したい列の列幅をマージすることもできます。
https://www.gnu.org/software/gawk/manual/gawk.html#Constant-Sizeを参照してください
入力に「標準」の awk/sort フィールド区切りがある場合、一般的な答えは次のようになります。
awk '{print $0, $2+$3}' | sort -n -k3
入力によっては、入力またはコマンドのパイプラインをいじる必要がある場合があります。
有効な入力に使用できる列の数がわかっている場合は、次のアプローチを試してください。
awk 'NF > 5 {print $0, $2+$3 }' | sort -k3 -n
これは、少なくとも 5 列の行のみを処理します。または、範囲があれば、次のようなことができます
awk 'NF > 5 && NF < 9 { ... }' | sort ...
NF
は、現在の行のフィールド数 (目的に応じたデータの列) を示す定義済みの AWK 変数です。上記の例では、条件を満たさない行を除外しています (したがって、if ステートメントの短いバージョンと考えることができます)。
使用可能なテスト データがないため、必要に応じてこれを調整する必要があります。