Обновленный ответ
Я не знаю достаточно о gnuplot
, чтобы понять синтаксис того, что вы хотите сделать, как описано в вашем комментарии. Я добавил код, который сохраняет заголовки столбцов и обрезает все пробелы, а также код, который выводит имя папки из имени файла - но я понятия не имею, как вы будете их использовать, поэтому я просто распечатаю их. Смотрите строку, помеченную "FIXME"
в коде!
#!/bin/bash
gawk -F $'\t' ' # Using TABs as field separators
/_GasOut/{ # On lines containing "_GasOut"
for(f=1;f<=NF;f++){ # ... iterate over all fields on line
hdr=$f # ... picking them up
colhdr[f]=hdr # ... saving the column headers
if(index(hdr,"_GasOut"))wanted[f]=1 # ... and noting which ones we want to print
}
}
ENDFILE{ # As we reaach end of each file
for(f in wanted){ # ... iterate over wanted fields
if(length(cmds)) cmds = cmds ",\n" # ... adding commas and newlines if needed
hdr = colhdr[f] # ... grabbing column header
gsub(/^[[:space:]]+|[[:space:]]+$/,"",hdr) # ... trim leading or trailing spaces
folder = FILENAME
gsub(/\/cat.txt/,"",folder) # ... deriving foldername
print "hdr=", hdr, ", folder=", folder # FIXME
cmds = cmds "\"" FILENAME "\" using 1:" f # ... and adding the "using" statement
}
delete wanted # Forget list of wanted fields for next file
}
END{ # At very end of last file
print cmds # ... print accumulated gnuplot cmds
}
' folder*/cat.txt
Пример вывода
hdr= O2_GasOut , folder= folder1
hdr= H2O_GasOut , folder= folder1
hdr= H2_GasOut , folder= folder1
hdr= N2_GasOut , folder= folder1
hdr= NO_GasOut , folder= folder1
hdr= NO2_GasOut , folder= folder1
hdr= N2O_GasOut , folder= folder1
hdr= O2_GasOut , folder= folder2
hdr= H2O_GasOut , folder= folder2
hdr= H2_GasOut , folder= folder2
hdr= N2_GasOut , folder= folder2
hdr= NO_GasOut , folder= folder2
hdr= NO2_GasOut , folder= folder2
hdr= N2O_GasOut , folder= folder2
"folder1/cat.txt" using 1:22,
"folder1/cat.txt" using 1:23,
"folder1/cat.txt" using 1:24,
"folder1/cat.txt" using 1:25,
"folder1/cat.txt" using 1:26,
"folder1/cat.txt" using 1:27,
"folder1/cat.txt" using 1:28,
"folder2/cat.txt" using 1:22,
"folder2/cat.txt" using 1:23,
"folder2/cat.txt" using 1:24,
"folder2/cat.txt" using 1:25,
"folder2/cat.txt" using 1:26,
"folder2/cat.txt" using 1:27,
"folder2/cat.txt" using 1:28
Оригинальный ответ
Я не могу считать поля так же, как вы, но вот что у меня есть:
#!/bin/bash
gawk -F $'\t' ' # Using TABs as field separators
/_GasOut/{ # On lines containing "_GasOut"
for(f=1;f<=NF;f++){ # ... iterate over all fields on line
this=$f # ... picking them up
if(index(this,"_GasOut"))wanted[f]=1 # ... and noting which ones we want to print
}
}
ENDFILE{ # As we reaach end of each file
for(f in wanted){ # ... iterate over wanted fields
if(length(cmds)) cmds = cmds ",\n" # ... adding commas and newlines if needed
cmds = cmds "\"" FILENAME "\" using 1:" f # ... and adding the "using" statement
}
delete wanted # Forget list of wanted fields for next file
}
END{ # At very end of last file
print cmds # ... print accumulated gnuplot cmds
}
' folder*/cat.txt
А вот пример вывода:
"folder1/cat.txt" using 1:22,
"folder1/cat.txt" using 1:23,
"folder1/cat.txt" using 1:24,
"folder1/cat.txt" using 1:25,
"folder1/cat.txt" using 1:26,
"folder1/cat.txt" using 1:27,
"folder1/cat.txt" using 1:28,
"folder2/cat.txt" using 1:22,
"folder2/cat.txt" using 1:23,
"folder2/cat.txt" using 1:24,
"folder2/cat.txt" using 1:25,
"folder2/cat.txt" using 1:26,
"folder2/cat.txt" using 1:27,
"folder2/cat.txt" using 1:28