I have a long, semicolon separated line of fields, 69 of them, to be precise.
I need to delete field 3, so I could, in a verbose manner, do:
awk -F\; '$1 == 3 { print $1";"$2";"$4 ... }' a.txt
Which would get really long. Is there a shortcut to say '$4 to the end', '$4 to $69' or maybe just 'delete $3'?
Related to the question: Repeating ";" all over the place is very unconvenient.
Of course, I could generate the command in part with:
echo -e "\b"{4..69}"\";\"$"
but while it looks clever, the result is a multiline command, which is not elegant to handle.
What is an elegant solution - preferably in pure awk.
I guess I can find a sed-solution fast, but I have more things to do (recalculate Field 5: if Field 1 == 2, Field5 = 5-Field5), which would be hard in sed, but I guess a good fit for awk.
I'm using Gnu-AWK 3.1.6, if it matters, but have, according to apropos:
I should have known better, and provided some test data right away, but of course, I will try out all your answers and upvote what looks promising.
3;03.2012;7228;0;1;3;1;3;4;3;1;3;4;3;2;0;4;4;1;1;4;2;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;1;1;3;0;3;1;3;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
3;03.2012;7229;0;2;2;0;5;5;4;4;5;5;4;4;2;5;5;0;0;3;3;0;0;5;6;0;0;0;0;0;2;2;1;2;1;2;2;2;4;3;4;1;5;4;2;0;0;0;0;0;0;0;0;0;0;4;4;4;4;4;0;0;0;0;0;0;0;
3;03.2012;7230;0;2;2;2;4;3;4;4;4;3;3;3;2;4;6;1;1;1;6;5;1;6;6;1;1;1;1;1;2;2;1;2;2;0;2;2;3;4;2;1;4;3;2;0;0;0;0;0;0;0;0;0;0;4;3;3;4;4;0;0;0;0;0;0;0;
3;03.2012;7231;0;1;3;1;4;4;3;3;4;4;4;4;2;5;5;1;1;4;6;5;1;4;1;1;1;1;1;5;2;1;1;2;0;0;1;2;4;4;3;1;4;3;2;0;0;0;0;0;0;0;0;0;0;4;4;4;4;3;0;0;0;0;0;0;0;
just hold the line. :)
I'm not sorry to interrupt this perverse game of golf. Do you masochists take pleasure in reinventing the wheel? Civilisation offers modern man such amenities as sewage collection and CSV libraries so he doesn't have to deal with—
How about as csvfix? It's a command-line tool that works with text streamed in and out, ie. the same environment as awk. The command you need is exclude
csvfix exclude -f 3 -rsep ";" a.txt
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With