I have 1 file, for example
12341234 3,0
12341342 4,0
How can I print:
abcdabcd 3,0
abcdacdb 4,0
cat $1 | tr 1234 abcd
changes both column 1 and 2. How to change only 1 column and print all columns?
One way to do this is to split the columns and then rejoin them with paste:
paste <(cut -d' ' -f1 <"$1" | tr 1234 abcd) <(cut -d' ' -f2- <"$1")
The <() syntax for process substitution is a bashism, but the required functionality from paste, cut and tr tools is all POSIX-specified; thus, the only thing we require to run that isn't part of the POSIX standard is bash itself.
Perl to the rescue:
perl -lane '$F[0] =~ tr/1234/abcd/; print "@F"' -- file
-n reads the input line by line-l removes newlines from input and adds them to printed lines-a splits automatically each line on whitespace into the @F arraytr operator works similarly to tr, but you can bind it by the binding operator =~ to only operate on the first column ($F[0]).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