Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash script - change value in only one column

Tags:

linux

bash

shell

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?

like image 914
skuska Avatar asked Sep 01 '25 20:09

skuska


2 Answers

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.

like image 69
Charles Duffy Avatar answered Sep 03 '25 13:09

Charles Duffy


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 array
  • the tr operator works similarly to tr, but you can bind it by the binding operator =~ to only operate on the first column ($F[0]).
like image 26
choroba Avatar answered Sep 03 '25 12:09

choroba