2017-10-18 161 views
1

最小值我有這樣的矩陣:AWK做一個簡單的減法,找到那

{{1,4},{6,8}} 

,我想從喜歡的第一個值。減去第二個值:4-1和8-6 和然後,比較器都和展示什麼是來自最低限度的值,在這種情況下:8-6 = 2

所有這一切都在終端

+2

歡迎堆棧溢出,你可以請示例輸入和預期的輸出。 – RavinderSingh13

+2

矩陣的形式是什麼?它在一個文件中?或者在一個bash變量中?它實際上是否包含所有大括號和逗號以及垃圾? –

+0

你爲什麼用AWK如AWK是更加專業化和非常高效的數據處理一行行如,但不限於,CSV文件目前尚不清楚。也許你可以給你的問題提供更多的背景。 – Setop

回答

2

使用AWK你似乎有點困惑,你是否要減去第一個從第二個或第二個從第一個。另外,關於你的數據是在一個文件還是一個變量。然而,這應該讓你開始...

如果我們更換任何瘋狂的括號或逗號與空格:

echo "{{1,4},{6,8}}" | awk '{gsub(/[{},]/," "); print}' 
1 4 6 8 

現在我們可以通過$4訪問領域$1,做你想要什麼:

echo "{{1,4},{6,8}}" | awk '{gsub(/[{},]/," "); x=$2-$1; y=$4-$3; if(x<y)print x; else print y}' 
2 

這樣,也許更優雅,替代通過@ 3161993的意見建議,你可以設置字段分隔符是一個或多個開放或c失去括號或逗號,像這樣:

awk -F '[,{}]+' '{x=$3-$2; y=$5-$4; if(x<y) print x; else print y}' <<< "{{1,4},{6,8}}" 
2 

而且,作爲@EdMorton好心指出的那樣,它可以更簡潔一點與三元操作是這樣的:

awk -F '[,{}]+' '{x=$3-$2; y=$5-$4; print (x<y ? x : y)}' <<< "{{1,4},{6,8}}" 
+0

嗯...你需要一個星號後拿起$ 3,然後你沒有得到4美元。 –

+1

呀,用'-F '[{}] +''你可以訪問'$ 2,$ 3,$ 4,$ 5',你可以,如果你想++ –

+1

@ 3161993我已經在增加,並計入您添加 - 感謝分享你的見解。 –