简体   繁体   中英

Bash: replacing a column by another and using AWK to print specific order

I have a dummy file that looks like so:

a ID_1 S1 S2
b SNP1 1 0
c SNP2 2 1
d SNP3 1 0

I want to replace the contents of column 2 by the corresponding line number. My file would then look like so:

a 1 S1 S2
b 2 1 0
c 3 2 1
d 4 1 0

I can do this with the following command:

cut -f 1,3-4 -d " " file.txt | awk '{print $1 " " FNR " " $2,$3}'

My question is, is there a better way of doing this? In particular, the real file I am working on has 2303 columns. Obviously I don't want to have to write:

cut -f 1,3-2303 -d " " file.txt | awk '{print $1 " " FNR " " $2,$3,$4,$5 ETC}'

Is there a way to tell awk to print from column 2 to the last column without having to write all the names?

Thanks

I think this should do

$ awk '{$2=FNR} 1' file.txt 
a 1 S1 S2
b 2 1 0
c 3 2 1
d 4 1 0

change second column and print the changed record. Default OFS is single space which is what you need here


the above command is idiomatic way to write

awk '{$2=FNR} {print $0}' file.txt 

you can think of simple awk program as awk 'cond1{action1} cond2{action2} ...'

only if cond1 evaluates to true, action1 is executed and so on. If action portion is omitted, awk by default prints input record. 1 is simply one way to write always true condition

See Idiomatic awk mentioned in https://stackoverflow.com/tags/awk/info for more such idioms

Following awk may also help you in same here.

awk '{sub(/.*/,FNR,$2)} 1'  Input_file

Output will be as follows.

a 1 S1 S2
b 2 1 0
c 3 2 1
d 4 1 0

Explanation: It's explanation will be simple, using sub utility of awk to substitute everything in $2 (second field) with FNR which is out of the box variable for awk to represent the current line number of any Input_file then mentioning 1 will print the current line of Input_file.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM