2

Hello i need a little help with my personal project i have something like this:

sourceFile:

something,something,something,something,something,someth ing,
something,something,something,something,something,somethi ng,
something,something,something,something,something,someth ing,

I need to write my variable after the last , in specific line (i have different value for every line)

resultFile:

something,something,something,something,something,someth ing,result1
something,something,something,something,something,somethi ng,result2
something,something,something,something,something,someth ing,result3

I used this:

sed -i "$numberOfLine,/,/ s/,/,$actualDeparture/6" $fileName

but the result is: badResultFile:

something,something,something,something,something,someth ing,result1
something,something,something,something,something,somethi ng,result2result1
something,something,something,something,something,someth ing,result3result2

I don't know why i have result2 and result1 in second line and i'm really desperate, because i don't know hoiw to fix this.

  • 1
    What is the value of the variable `actualDeparture`? – Beta Oct 01 '16 at 23:40
  • Wow you really DO have "something" like this :-). [edit] your question to provide more truly representative sample input/output including the values of your variables or you're likely to get a solution that only works for one line and/or variable contents and/or when your input file is full of the text "something". And if by chance you are calling sed in a loop to do this, read http://unix.stackexchange.com/q/169716/133219 and http://stackoverflow.com/q/29613304/1745001 to learn SOME of the reasons not to do that. – Ed Morton Oct 02 '16 at 04:06

2 Answers2

3

I would use awk:

awk '{ print $0 "result" NR }' sourceFile
  • print $0 "result" NR prints each line, then string result, and then each line (record) number (NR)

Example:

% cat file.txt  
something,something,something,something,something,something,
something,something,something,something,something,something,
something,something,something,something,something,something,

% awk '{ print $0 "result" NR }' file.txt
something,something,something,something,something,something,result1
something,something,something,something,something,something,result2
something,something,something,something,something,something,result3
heemayl
  • 39,294
  • 7
  • 70
  • 76
  • 1
    The OP is not clear about that but I'm not sure he wants a concatenation of a literal `result` and `NR` as variable value. He could have used `firstresult`, `secondresult` as well. – SLePort Oct 02 '16 at 06:27
  • doesn't working i used this: `awk '{ print $0 $resultVariable $lineNumber }' $fileName` No error, but in the file nothing happened, no change, it just print on stdout and it has one more problem, i edit my question sorry that i wasn't accurate for first time – Zdeněk Sklenář Oct 02 '16 at 08:53
  • Thanks for help but i needed `sed` solution – Zdeněk Sklenář Oct 02 '16 at 09:21
1

With your address range $numberOfLine,/,/ all lines starting from $numberOfLine to next line containing , are processed.

And you don't need to count number of , in your s command, just replace $(end of line) with your variable value.

To process each line individually, try this:

sed -i "$numberOfLine s/$/$actualDeparture/" "$fileName"
SLePort
  • 15,211
  • 3
  • 34
  • 44
  • Doesn't working, but it is closer then awk i used this: `sed -i "$lineNumber s/$/$actualDeparture/" "$fileName"` . But in output result is on new line: `something,something,something,something,something,something,\n result1 something,something,something,something,something,something,\n result2 something,something,something,something,something,something,\n result3` – Zdeněk Sklenář Oct 02 '16 at 08:42
  • This working perfectly, thanks for help. `sed -i "$lineNumber s/,/,$actualDeparture/6" "$fileName"` – Zdeněk Sklenář Oct 02 '16 at 09:20