awk en tar output parsen naar csv (spaties in bestandsnaam )

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
Ik heb een awk commando gevonden (bij elkaar gecopy-paste) waarmee ik van tar --verbose --verbose output een csv bestand kan maken dat ik dan weer kan importeren in een SQL database.

van dit (tar output redirected naar een textbestand)
code:
1
-rwxrwxrwx 1028/138862    2769793 2020-06-08 14:57 photo/iphoneplusbackup/IMG_6348.JPG

Maak ik met awk dit (csv die ik ooit wil kunnen importeren in SQL)
code:
1
-rwxrwxrwx,1028/138862,2769793,2020-06-08,14:57,photo/iphoneplusbackup/IMG_6348.JPG


Maar in sommige bestanden zitten - je raadt het al - een of meerdere spaties. Dus met mijn erg beperkte kennis van awk heb ik lompweg dit gedaan:
code:
1
cat 0000003L3.txt | awk -F" " '{ print $1","$2","$3","$4","$5","$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$17}'

in de veronderstelling dat na veld 5 (de tijd) er niet meer dan 12 spaties in de bestandsnaam zullen zitten. Goed, in 99% van de gevallen zal het w... ... :X . Neen stop, stop stop!!! 8)7 Dit kan beter.

Weet iemand wat ik aan deze regel moet toevoegen om eender hoeveel spaties, dat mooi te catchen? Zodat ik uiteindelijk iets als dit zou krijgen.

code:
1
cat 0000003L3.txt | awk -F" " '{ print $1","$2","$3","$4","$5","}'


code:
1
-rwxrwxrwx,1028/138862,1876729,2020-06-08,14:52,dit bestand is erg lomp gemaakt met erg veel spaties erin ik denk dat je dit niet mooi gaat kunnen parsen met awk tenzij je het echt heel heel heel heel heel erg inventief bent of het vriendelijk en beleefd vraagt op t.net

Beste antwoord (via bucovaina89 op 11-06-2020 16:14)


  • vanaalten
  • Registratie: September 2002
  • Laatst online: 19:34
Ik heb een lompe oplossing, denk ik:
code:
1
cat 0000003L3.txt | awk '{printf("$1,$2,$3,$4,$5,"); $1="";$2="";$3="";$4="";$5="";sub(/^     /,"");print}'


De '-F" "'' was sowieso al overbodig, want de field separator is standaard al whitespace.
Mijn oplossing print dus eerst het stuk dat geen problemen geeft. Dat stuk wordt vervolgens leeg gemaakt (die "$1="";$2=""...). Dan nog met een substitute de spaties weghalen die tussen de velden $1, $2 enzo staan - en dan het restant printen.

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 19:34
Ik heb een lompe oplossing, denk ik:
code:
1
cat 0000003L3.txt | awk '{printf("$1,$2,$3,$4,$5,"); $1="";$2="";$3="";$4="";$5="";sub(/^     /,"");print}'


De '-F" "'' was sowieso al overbodig, want de field separator is standaard al whitespace.
Mijn oplossing print dus eerst het stuk dat geen problemen geeft. Dat stuk wordt vervolgens leeg gemaakt (die "$1="";$2=""...). Dan nog met een substitute de spaties weghalen die tussen de velden $1, $2 enzo staan - en dan het restant printen.

Acties:
  • +1 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
Inderdaad, even getest en die werkt :)

Vielen Dank!