Витягнути ім'я файлу з файлу за допомогою скрипту оболонки


0

У мене є текстовий файл із таким рядком:

/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif

Я хочу видобути frtbla_mcdetc_0000149099_20101126135009990_1.tif; слово після останньої косої риски ( /).


якщо ви готові використовувати excel - ви легко це зробите - "без сценарію VB"
Prasanna

Відповіді:


1

Якщо ви перебуваєте в середовищі, подібному до Linux, ви можете скористатися basenameутилітою:

basename $(<your_file)

дякую .. я придумав метод..по-перше, я видалив усі "/", ніж використав останній параметр .. але ваші найкращі ..
Grv

0

використовувати цю команду

cat text_file_name | cut -d '/' -f 6

Схоже, ми обидва відповіли одночасно! Тільки для власного зведення, вирізання працює над файлами безпосередньо. Часто просто catфайл файлу підпадає під те, що відомо - дещо судження - як " марне використанняcat "; якщо ви не переглядаєте файл чи подібний (хоча там ви знову можете скористатися less)
bertieb

@bertieb високо оцінив
psycho3

0

Якщо ви знаєте точний формат структури каталогів, і він не зміниться, ви можете використовувати cut:

$ cut -f6 -d '/' file.txt

Тут використовується нарізка для розгляду розділювачів каталогів як роздільника і витягування 6-го.

Якщо замість цього все, що ви знаєте, це остання частина рядка, але не знаєте структури каталогу , ви також можете використовувати rev:

$ rev file.txt | cut -f1 -d '/' | rev

Тут файл перевертається і витягується перше поле, перш ніж повторно повернутись.


0

Далі стосується всіх рядків оболонки, а не лише назви файлів, і це набагато простіше, ніж вирізати, тому що вам не потрібно знати, скільки полів є перед потрібним:

$ foo=/path/to/file/split/by/slashes.txt
$ echo ${foo##*/}
slashes.txt

Для цього використовується "жадібна обробка", тобто обрізати все до останнього "/", як описано тут:

https://stackoverflow.com/questions/3162385/how-to-split-a-string-in-shell-and-get-the-last-field

${foo  <-- from variable foo
  ##   <-- greedy front trim
  *    <-- matches anything
  /    <-- until the last '/'
 }

0

Я не знаю, що таке стандартна оболонка в Aix, але bashвона доступна і підтримує відредаговане розширення змінних.

Якщо ваше повне ім’я знаходиться в змінній FileName, то ${FileName##*/}відображається ім’я з усіма провідними символами, видаленими до останнього /; на відміну ${FileName#*/}видаляє до першого /, в той час як ${FileName%/*}видаляє остаточні символи з останнього /(тобто шлях до каталогу).

Якщо ви генеруєте імена файлів findкомандою, вам потрібна така команда:

find ... | while read FileName; do echo ${FileName##*/}; done

Якщо у текстовому файлі:

while read FileName; do echo ${FileName##*/}; done < FileList.txt

Замініть echoкоманду будь-якою обробкою, яку вам потрібно зробити з іменем.


(Здається, я перекреслив інші відповіді, але я дозволю своїй відповіді стояти, оскільки її частини в інших місцях не висвітлюються.)
AFH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.