다음 줄을 포함하는 파일이 있다고 가정해 보겠습니다.
02.03.14 14.50 14.50 0.00 Desc
02.03.14 17.00 0.00 17.00 Desc
01.03.14 2.82 1.68 calc Desc
02.03.14 1.04 0.00 1.04 Desc
06.03.14 6.00 0.00 6.00 Desc
08.03.14 11.76 2.98 calc Desc
10.03.14 3.27 0.00 3.27 Desc
calc
포함하는 모든 열 항목(열에만 있음)을 4th
포함하는 열과 열의 차이 로 바꾸고 싶습니다 .3nd
2nd
4th=3rd-2nd
어떻게 해야 하나요?
답변1
Sed는 산술 연산을 수행할 수 없습니다. 대신 awk를 사용하세요.
awk '
$4 == "calc" {sub(/calc( |\t)/, sprintf("%-6.2f", $3 - $2))}
1'
마지막은 1
모든 것을 인쇄한다는 의미입니다(이전 변환 이후). sub
텍스트 대체를 수행하는 대신에 할당할 수 있지만 $4
그렇게 하면 열 사이의 공백이 단일 공백 문자(공백과 탭의 순서일 수 있음)로 대체됩니다. 열이 탭으로 구분되어 있으면 다음을 사용할 수 있습니다.
awk '
BEGIN {ORS = "\t"}
$4 == "calc" {$4 = sprintf("%.2f", $3 - $2))}
1'
네 , 네, 튜링완전이기 때문에 기술적으로는 가능합니다. 그러나 제정신이 아닙니다.
답변2
awk -F "\t" '$4 == "calc" {$4 = $3-$2}1' OFS='\t' file