4 ms·
$ echo "one two three four five" | awk '{$3="";print}' one two four five
by thrwwy9234 1y ago
$ echo "one two three four five" | awk '{$3="";print}'
one two four five
- chaps 1y agoOh dang, that's good.
- shawn_w 1y agoAs long as you don't mind the extra space in the middle.
- fragmede 1y agoif you do: sed 's/ / /g'
- lucb1e 1y agoOr sticking with awk, I have this bash alias to remove excess whitespace that is just: awk '{$1=$1};1'
- fuzztester 1y agowhat does the 1 at the end do? make awk print all lines? I'm a bit rusty with my awk.
- thrwwy9234 1y agoIt’s a condition. 1 is true-ish, so it’s a condition that is always true. The default action in awk is print, so it’s the same as: '{$1=$1}1{print}' Or the same as '{$1=$1}{print}' Since the default condition is true. But 1 is shorter than {print}.
- chaps 1y agoOften times I don't! Entirely depends on what I'm doing. #1 thing off the top of my head is to remove That One Column that's a bajillion characters long that makes exploratory analysis difficult.
- saghm 1y agoI wonder if it's possible to encode the backspace character in the replacement string?
- ZoomZoomZoom 1y agoNo problem, there's \b. echo "one two three four five" | awk '{$3="\b"; print}' Inserts the backspace character (^H), which you can then remove with [global] substitution: awk '{$3="\b"; sub(/\32\b/, ""); print}' You can, of course, use an arbitrary sentinel value for the field to be deleted. Should work in gawk and BWK awk.