У меня есть набор файлов данных (*.all
), расположенных в разных папках
Documents/rawdata/Geob1005/1.all, 2.all, 3.all,...,n.all
Documents/rawdata/Geob1006/A.all, B.all, C.all,...,Z.all and so on...
Я создал файл с именем datalist.mb-1
в каждом каталоге, в котором перечислены все файлы *.all
, расположенные в тот же каталог, используя:
/bin/ls -1 *.all | awk '{print $1" 58"}' >datalist.mb-1
, так что я получаю это:
Documents/rawdata/Geob1005/datalist.mb-1
Documents/rawdata/Geob1006/datalist.mb-1
and so on...
Теперь мне нужно создать «главный» список данных в Documents/rawdata/
, который будет указывать на все другие даталисты внутри каталогов rawdata/
мне нужно, чтобы результаты «основного» специалиста по данным выглядели так:
Geob1005/datalist.mb-1 -1
Geob1006/datalist.mb-1 -1
Есть идеи, как выполнить эту задачу?
[ 1115] Заранее спасибо.
Мне, наконец, удалось сделать это с помощью Locate, на самом деле мне не нужен был полный путь, но использования awk было достаточно, чтобы просто показать путь из подкаталога «geo».
Вот как я это сделал:
locate ~/Documents/rawdata/*/datalist.mb-1 | awk 'BEGIN {FS="/"} {print $4 "/" $5 " -1"}' > master.txt
Очень простой способ сделать это - использовать команду locate
следующим образом:
locate Documents/rawdata/Geob*/datalist.mb-1 > master.txt
То есть, если полные пути в порядке.
Однако, если вам нужен формат, который вы описали выше, только с подкаталогом «geo» и файлом, вы можете использовать простой маленький скрипт на python, такой как этот: :
locate ~/Documents/rawdata/*/datalist.mb-1 | awk -F/ '{print $4 "/" $5 " -1"}' > master.txt
Не проверено
Вы можете использовать bash, чтобы составить список всех файлов в одном файле .txt
(просто используйте команду find
, чтобы найти файлы «datalist») а затем труба, что файл).
В python вы можете использовать этот список файлов (например, datalist_master.txt
) следующим образом:
fi = file.open('datalist_master.txt', 'r')
li = fi.readlines()
new_li = []
for element in li:
# get rid of unnecessary path info
element = element.lstrip('Documents/rawdata/')
# add last two digits
element = element + ' ' + element[-2:]
new_li.append(element)
fi.close()
print new_li #or save it somewhere
Это наверняка также возможно в bash (но я не знаю как) .