Reading files of different type and same basename

Hi ! all

I have need of accessing multiple files of different type same base name, and I want to compare base name if matching then I want to send those 2 files of different type to some program, for further processing

my files are like this

file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_6.txt
file_8.txt
file_1.asc
file_2.asc
file_3.asc
file_4.asc
file_7.asc

First I want to save file names in some array like this

file_type1 array
file_type2 array
now compare file_type1 array and file_type2 array

first send base name matched files as a variable to sub program say

variable name txt for .txt file 

and

variable name asc for .asc file

program is something like this

awk .................'{}' $txt 
awk ..................'{}' $asc

once matched file ends, then send only one variable from unmatched file array, to sub program one by one

expected output

if I do echo $txt $asc should result like below

file_1.txt file_1.asc
file_2.txt file_2.asc
file_3.txt file_3.asc
file_4.txt file_4.asc
file_6.txt
file_7.asc
file_8.txt

Hope this will be possible with your help

Not sure I understood your sophisticated specification, but as a starting point you could evaluate this one:

ls *.txt *.asc |
  cut -d\. -f1 |
  uniq -c -w7  |
  while read CNT FILE
    do [ "$CNT" -eq 2 ] && { ufct1 "${FILE}.asc"; ufct1 "${FILE}.txt"; } || ufct2 "$FILE*"
    done
file_1.asc
file_1.txt
file_2.txt
file_3.asc
file_3.txt
file_4.asc
file_4.txt
file_6.txt
file_7.asc
file_8.txt

having defined user shell functions ufctn to just echo the parameter.

1 Like

Sir

ufctn

function not working with my OS(Ubuntu 12.04 LTS) but I could is info page

following is error msg

ufct1: command not found
ufct1: command not found
ufct2: command not found
ufct1: command not found
ufct1: command not found
ufct2: command not found
ufct2: command not found
ufct2: command not found

any alternate solution is possible ?

Did you ever hear about shell functions? You may call them subroutines as well... man bash:

I'm not sure what else you need? Want it spoon fed?

$ ufct1() { echo $1 double; }
$ ufct2() { echo $1 single; }

Put your processing into those functions.

Sir I need $1 as separate variable here what happens is first txt file will come then asc file

suppose if I use

$1 

in my awk script that is

# 1st script
awk .....'{}' $1

#2nd script
awk ...'{gsub(" ","\t");print}' $1 

then both script will work with same input

I want like this

# 1st iteration 

some computation using file_1.txt
# 1st script
awk .....'{}' file_1.txt

#2nd script
some computation using file_1.asc
awk ...'{gsub(" ","\t");print}' file_1.asc 

I did following mistake(like subroutine) sorry Sir
and thank you so much for solution

if statements
abc;


abc()
{
xyz code 
} 

Not sure I understand. Why don't you simply call functionA with the .txt file, and then functionB with the .asc file as a parameter?

Sir there are only 2 ways left to me as there are many comparison inside script

one is use txt and asc as separate variable

2nd one is merge base name matching file and write id number to file

assume file_1.txt looks like this

15-12-1996   21-2-2024 12 34,000 888 976  1
15-12-1994   21-2-2026 12 35,000 885 977  2
15-12-1993   21-2-2025 12 37,000 887 976  3
15-12-1995   21-2-2029 12 39,000 878 976  4

and file_1.asc looks like this

15-12-1996   21-2-2024 12 34,000 888 976  1
15-12-1995   21-2-2029 12 39,000 878 976  4
15-12-1994   21-2-2026 12 35,000 885 977  2
15-12-1993   21-2-2025 12 37,000 887 976  3
15-12-1994   21-2-2026 12 35,000 885 977  2
15-12-1993   21-2-2025 12 37,000 887 976  3

then merged file should look like this

15-12-1996   21-2-2024 12 34,000 888 976  1 id1
15-12-1994   21-2-2026 12 35,000 885 977  2 id1
15-12-1993   21-2-2025 12 37,000 887 976  3 id1
15-12-1995   21-2-2029 12 39,000 878 976  4 id1
15-12-1996   21-2-2024 12 34,000 888 976  1 id2
15-12-1995   21-2-2029 12 39,000 878 976  4 id2
15-12-1994   21-2-2026 12 35,000 885 977  2 id2
15-12-1993   21-2-2025 12 37,000 887 976  3 id2
15-12-1994   21-2-2026 12 35,000 885 977  2 id2
15-12-1993   21-2-2025 12 37,000 887 976  3 id2

out of 2 any one solution can complete my task