0 down vote favorite
share [g+] share [fb] share [tw]
I need help reading a txt file line by line, and then looping through each element in bash script. After hitting a element I need to cut the # of the column represented by the current numerical element, and then assign it to a file. In the end I need to paste all these files together. The columns are in a separate file. The first txt file reads as such
1,6,62,6
7,7,52,24
3,145,25,69
Then for example I need to cut column 5 in a separate file, and then assign to a new file. One the line is done the process starts again.This process would be easy in python or java, but I'm just very new to bash script.
This is a sample column:
1:45
1:56
1:56
1:69
ccData_t.nnv
while read line; do
cut -f2 ccData_t.nnv >p
for i in $(line);
do
cut -fi+1 ccData_t.nnv |sed "s/^/"i":/" >ti
echo paste p t1 t2 t3 t4 |grep -v pro >svm_train_model1.tsv
done < FILE
In the end I have to have all columns appended together as such.
1:45 6:45 62:45
1:56 6:34 62:23
1:56 6:32 62:52
1:69 6:12 62:123
Having trouble with bash syntax logic
I see you have another thread:
http://www.murga-linux.com/puppy/viewtopic.php?t=78947
Or is this a howto after all?
If it isn't, it isn't immediately obvious exactly what you're asking for help with. Could you clarify?
http://www.murga-linux.com/puppy/viewtopic.php?t=78947
Or is this a howto after all?
If it isn't, it isn't immediately obvious exactly what you're asking for help with. Could you clarify?
Do you know a good gtkdialog program? Please post a link here
Classic Puppy quotes
ROOT FOREVER
GTK2 FOREVER
Classic Puppy quotes
ROOT FOREVER
GTK2 FOREVER
Hi acampbe2;
Code: Select all
for L in `cat File.txt`
do
( Do what you need to...)
done
paste File-1.txt File-2.txt > Final-File.txt
Your problem is probably that column 5 is not always there :
1,6,62,6 has 4 columns ...
while read line;do
column_5=`echo "$line" |cut -f 5 -d ','`
if [ "$column_5" = '' ];then
column_5='0'
fi
done <FILE
1,6,62,6 has 4 columns ...
while read line;do
column_5=`echo "$line" |cut -f 5 -d ','`
if [ "$column_5" = '' ];then
column_5='0'
fi
done <FILE
Code: Select all
echo "
1,2,3,4
2,3,4,1,
4,3,2,1,,
5,4,3,2,1
" >test_file.lst
while read line;do [ "$line" ] || continue;column_5=`echo "$line" | cut -f 5 -d ','`; [ "$column_5" ] || column_5=0; echo "$line | $column_5"; done <test_file.lst
1,2,3,4 | 0
2,3,4,1, | 0
4,3,2,1,, | 0
5,4,3,2,1 | 1
- Moose On The Loose
- Posts: 965
- Joined: Thu 24 Feb 2011, 14:54
I edited the Karl Godt comment a little:
This way cut always has the needed column.
There is a slightly easier way to deal with the issue of too few columns.Karl Godt wrote:Your problem is probably that column 5 is not always there :
1,6,62,6 has 4 columns ...
Code: Select all
while read line;do column_5=`echo "$line" |cut -f 5 -d ','` if [ "$column_5" = '' ];then column_5='0' fi done <FILE
Code: Select all
column_5=`echo "${line},0,0,0,0,0,0,0" |cut -f 5 -d ','`
But watch out $line has an entry. If $line would be NULL , then cut and gawk -F "," would treat ",1,2,3,4,5" differently . Field 1 would be NULL then and field 5 would get the value '4' .Moose On The Loose wrote:I edited the Karl Godt comment a little:There is a slightly easier way to deal with the issue of too few columns.Karl Godt wrote:Your problem is probably that column 5 is not always there :
1,6,62,6 has 4 columns ...
Code: Select all
while read line;do column_5=`echo "$line" |cut -f 5 -d ','` if [ "$column_5" = '' ];then column_5='0' fi done <FILE
This way cut always has the needed column.Code: Select all
column_5=`echo "${line},0,0,0,0,0,0,0" |cut -f 5 -d ','`