Oszlop törlése a fájlból

Sziasztok!

Ott akadtam meg, hogy van egy fájlom, amiből el kellene távolítanom egy bizonyos oszlopot. A fájlban ezeknek az oszlopoknak az elhelyezkedése a sor elejétől különböző, ellenben a végéről indulva ugyanaz.
Ki merre indulna el?

pl.:
1234, xdkfj, KIVÁGNI, 1, asdfg,
1234, xdkfj, qwert, KIVÁGNI, 1, asdfg,
qwert, KIVÁGNI, 1, asdfg,

Előre is köszönöm!

Hozzászólások

Ha mindig KIVÁGNI szerepel benne, akkor sed. :)
Ha más is szerepelhet, feltétel szerint, akkor awk.


cat ./teszt.txt | while read LINE; do LINE=( $LINE ); LINE[$((${#LINE[@]}-3))]=; echo ${LINE[@]}; done

Ez valamiért nem működik (persze a beírt példára ok, csak az adott fájlon nem)
Bemásolok egy sort:
Teszt,2223333,Teszt 24 Sor 500 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZT_KELLENE_KIVÁGNI,19490,19490,1,1,darab,érték szám

Nem tudom, hogyan fog megjelenni, de ez egy sor. Az "EZT_KELLENE_KIVÁGNI" és a "981234MBG.dat" között van szóköz
üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

Nekem csak az elsőt kellene eltávolítani(bocs kevés vagy sok volt a kávé :) ), tulajdonképpen ez egy duplikátum és az első nem kell:
Teszt,2223333,Teszt 24 Sor 500 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám
üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

mondjuk sokat segítene a megfejtésben, ha idemásolnál legalább 2 sort és megadnád azt is, hogy mi az elvárt eredmény. Lehet én vagyok fáradt, de nekem még nem világos.

http://www.qualysoft.hu/hu/dms/qs-portal/presentation/M-2010szakmainap/…

A 2. diára kezd emlékeztetni ez a szál.


#! /bin/bash
COL=8
cat ./teszt.txt | while read LINE
  do
    OFS="$IFS"
    IFS=","
    ROW=( $LINE )
    IFS="$OFS"
    UB=${#ROW[@]}
    COUNT=0
    while ((COUNT<UB))
    do
      if ((COUNT==${#ROW[@]}-COL))
#      if echo "${ROW[$COUNT]}" | grep -q ".dat$"
      then
        ROW[$COUNT]="$(echo "${ROW[$COUNT]}" | sed -n 's/^.* \([A-Za-z0-9]\+\.dat\)$/\1/p')"
      fi
      echo -n "${ROW[$COUNT]}"
      ((COUNT < UB-1)) && echo -n "," || echo -e "\n"
      ((COUNT++))
    done
  done

mostmár rendesen össze van gányolva:))
de az a file is amiből dolgozni kell!

cut -d"," -f1-3,5-6 < bemenet > kimenet

Talán feltűnt hozzászólásomban az idézet, mely szerint a "rev"-re reagáltam. Ui. az az, ami említést érdemel.

Hint: [...]

Ugyan, az OP adott mintaállományt a nyitóban:


1234, xdkfj, KIVÁGNI, 1, asdfg,
1234, xdkfj, qwert, KIVÁGNI, 1, asdfg,
qwert, KIVÁGNI, 1, asdfg,

rev | cut -f -3,5- -d , | rev

kimenete


1234, xdkfj, 1, asdfg,
1234, xdkfj, qwert, 1, asdfg,
qwert, 1, asdfg,

"Fero" egyszerűen elszámolta a vesszőket.

Ha nem ez a megoldandó probléma, akkor megint ott vagyunk, hogy kérdezni tudni kell. (A topiknyitót lehet módosítani.)

Hátulról a harmadik oszlopot kell kivágni?
Ha igen, akkor szerintem:

sed "s@\(.*\),[^,]*,\([^,]*,[^,]*,[^,]*\)\$@\1,\2@"

Kéne pár sor valódi bemenet , és hogy mit is szeretnél, de pl:

awk -v x=3 '{ for ( i=1 ; i<= NF; i++ ) { if ( i != NF - x + 1 ) printf( "%s%s", $i, FS ) ;} print RS }'

Ez a hátulról a 3. mezőt takarítja ki, és az x változtatásával szabályozható, ha meg nem sima szóköz/tabulátor a mezőelválasztó, akkor egy -F 'akarmi' opcióval az is változttható.

Köszönöm, tesztelem!
Akkor a több sor:

Teszt,2223343,Teszt 24 Sor 510 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,valami,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám
Teszt,2223333,Teszt 24 Sor 500 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám
Teszt,2223343,Teszt 24 Sor 510 Sor 2.2 1111mfg tesztadat (ide valami),sorozat,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám
Teszt,2223333,Teszt 24 Sor 500 Sor 2.2 1111mfg tesztadat (ide valami),érték,adat,1234: sorozatszám12,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám

üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

Ez már alakul, a gond az, hogy amikor megadom neki, akkor ennél a sornál:
Teszt,2223333,Teszt 24 Sor 500 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,1,EZT_KELLENE_KIVÁGNI 981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám
ezt a részt vágja ki:
,sorozatszám12,1,EZT_KELLENE_KIVÁGNI
ehelyett:
EZT_KELLENE_KIVÁGNI
Ami biztos (most, hogy jobban nézem én is - és ezért elnézést!), hogy hátulról a harmadik szóköz előtti részt kellene az előtte lévő vesszőig törölnöm
üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

Ácsi. MI a mezőelválasztó? Szóköz vagy vessző? Ha mindkettő lehet, akkor csak gányolás marad - vagy a bemenet értelmes formában történő előállítása (egységes mezőelválasztó).

Próbálom megérteni... A végétől az x. szóköz előtti részt kell kivágni az azt megelőző vesszőig?

Hm...nálam nem, de lehet már nekem jojózik a szemem... :D

sed -r 's/^(.*),[^ ]+ (([^ ]+ ){2})([^ ]+)$/\1\2\4/g' proba.txt
Teszt,2223343,Teszt 24 Sor 510 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,valami,1,EZT_KELLENE_KIVÁGNI
981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám

üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

Nálam ezt adja:
Teszt,2223343,Teszt 24 Sor 510 Sor 2.2 1111mfg tesztadat (ide valami),sorozatszám12,valami,1981234MBG.dat, EZ_MARADHAT,19490,19490,1,1,darab,érték szám

Most az eredeti fájlban
- vagy a legvégén van még valami szemét (mondjuk egy space), ami miatt nincs egyezés,
- vagy DOS-os sorvég van
- vagy C a LANG beállításod valami hu_HU.UTF-8 (esetleg en_US.UTF-8) helyett
- vagy a fentiek kombinációja :)


awk ' BEGIN { NEMKELL=2; } 
            { $(NF-NEMKELL)=""; 
              print;
            }' 

Az első szerintem nem probléma, de ha igen, akkor NF+1-NEMKELL, és tényleg meg van oldva :)
A második jó kérdés - itt "," a szeparátor, tehát a csúnyán kívül probléma is, erre egy szintén ronda, de gyors megoldás az awk kimenetét átzavarni egy


sed 's/,,/,/' 

parancson. Mivel a szeparátor a vessző, így az egész:


awk -F, ' BEGIN { OFS=",";
                  NEMKELL=3;
                } 
                { $(NF+1-NEMKELL)=""; 
                  print;
                } ' |
sed 's/,,/,/'

ha grafikus felület ven/kell. ms excel vagy libre office ott van ilyen sorokból oszlopot és meghatározhatod, hogy mi legyen az elválasztó.

#!/usr/bin/python
# -*- coding: utf8 -*-

import sys

for s in open(sys.argv[1], "r"):
----m = s.split(',')
----print ','.join(m[0:-4]) + ',' + ','.join(m[-3:]),

A '----' jelet cseréld szóközre. Az argumentum a bemenő fájl neve.

Nyisd meg LibreOffice-szal, vesszővel határozd meg az oszlopok tagoltságát, távolítsd el a fölösleges oszlopot, ments el csv-ben, a tabulátotokat getidben alakítsd át vesszőkké.