Nowe posty

Autor Wątek: Wypisywanie zmiennej liczby kolumn w sformatowanej postaci  (Przeczytany 2003 razy)

kotecek

  • Gość
Witajcie,
Mam problem z napisaniem komendy która pozwala drukować wybrane prze zemnie kolumny z podanego pliku np kolumna 1 i 4(argument d pozwala zmienić separator) w formacie
kolumna 1     kolumna 2 ....


#!/bin/bash

Sep=" "
pole=1
LICZNIK=0
while getopts ":d:" Option; do
case $Option in
d) Sep=$OPTARG;;
\\?) echo "opcja nieprawidlowa: -$OPTARG"
exit 1;;
:)  echo "opcja -$OPTARG wymaga argumentu"
exit 1;;
esac
done
shift $((OPTIND-1))
file=$1
shift

# jeżeli podam w argumentach że chce wydrukować kolumne 3 10 to poniższa komenda zliczy że są 2 argumenty i wypisze kolumne 1 i 2....
awk -F$Sep -vlicznik="$LICZNIK"  '{ for (x=1; x<=licznik; x++) printf("%s  ", $x);printf "\\n" }' $file

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Wypisywanie zmiennej liczby kolumn w sformatowanej postaci
« Odpowiedź #1 dnia: 2015-01-31, 16:18:30 »
Czyli chcesz zrobić program, który zrobi ci np to samo co polecenie (dla twojego przykładu separator spacja, kolumny 1 i 4, plik PLIK):
cut -d" " -f1,4 PLIK
?
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

kotecek

  • Gość
Wypisywanie zmiennej liczby kolumn w sformatowanej postaci
« Odpowiedź #2 dnia: 2015-02-04, 19:30:39 »
chodziło o to:
#!/bin/bash
ep=" "
while getopts "d:" opt
   do
      case $opt in
   d) sep="$OPTARG";;
      esac
   done

shift $((OPTIND-1))
plik="$1"
awks="print \\$$2"
shift 2
for i
    do
   awks="$awks,\\"$sep\\",\\$$i"
    done
awk -F "$sep" "{$awks}" "$plik"

exit 0;