En Bash, puede agregar a una variable usando var+=value
. Pero su problema no es ese, sino generar la nueva línea. La forma más fácil es usar $'..'
comillas, que interpreta los escapes de barra invertida -como \n
para nueva línea:
a+=$'\nfile4'
perl позволяет получить красивое лаконичное решение:
perl -ale '
@cols = grep {$F[$_] =~ /sample/} 0..$#F if $. == 1;
print "@F[@cols]";
' file
А как насчет этого?
NR==1 {
for (i=1; i<=NF; i++) {
if ($i ~ /sample/) {
head[i]= $i
printf "%s\t", $i
}
}
printf "\n"
}
NR>1 {
for (i=1; i<=NF; i++) {
if (head[i]) {
printf "%s\t", $i
}
}
printf "\n"
}
Несколько наивный подход, но он работает с небольшими файлами.
$ awk '
BEGIN { FS=OFS="\t" }
NR==1 {
for (inFldNr=1; inFldNr<=NF; inFldNr++) {
if ($inFldNr ~ /sample/) {
out2inFldNr[++numOutFlds] = inFldNr
}
}
}
{
for (outFldNr=1; outFldNr<=numOutFlds; outFldNr++) {
inFldNr = out2inFldNr[outFldNr]
printf "%s%s", $inFldNr, (outFldNr<numOutFlds ? OFS : ORS)
}
}
' file
sample sample_CCC sample_FFF
000 ccc fff