Awk – nyomtassa ki az utolsó oszlopot vagy egyet az utolsó előtt, ha az utolsó üres

A AWK fájlt akarom használni fájlnév vagy az utolsó mappanév, ha a karakterlánc csak könyvtár.

Megvan:

 awk -F "/" "{print $NF}" 

az utolsó oszlop kinyomtatásához, és:

 awk -F "/" "{print $(NF - 1)} 

egy oszlop nyomtatásához az utolsó előtt.

Hogyan készíthetek awk ismerje fel, ha a karakterlánc csak könyvtárat tartalmaz, és nincs fájlnév, és ebben az esetben nyomtasson egy oszlopot az utolsó elé.

A problémám az, hogy egy könyvtár kinézhet:

./folder1/folder2/folder3/ 

és ebben az esetben az utolsó oszlop üres lenne. Azt akarom, hogy awk felismerje ezt, majd kinyomtassa a folder3 -t (tehát egy oszlopot az utolsó előtt).

Válasz

Használhatja a if vagy a ?: operátort is ehhez.

awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}" 
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}" 

Megjegyzések

  • a terner operand test ? true : false okos választás.

Válasz

A GNU segédprogramokkal lásd még:

xargs -rd "\n" basename -a -- 

Amely egy list.txt bemeneten található:

./folder1/folder2/folder3/ ./foo bar/// / 

a következőket adja:

folder3 foo bar / 

zsh “s :t módosító (csh -től) "" ad "/" helyett "/"

$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <> 

Válasz

próbáld

(Mégsem tudtam tesztelni).

Válasz

A shellben:

$ basename ./folder1/folder2/folder3/ folder3 

Hozzárendelés egy változóhoz, a basename használatával egy változóval, amely egy elérési út:

filename=$( basename "$pathname" ) 

A basename segédprogram szabvány POSIX segédprogram .

Megjegyzések

  • thx, kérdésem egy kicsit sokat nyer a , az basename használata sokkal egyszerűbb.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük