mount
команда только отобразит одно устройство за один раз, таким образом независимо от того, что метод, который Вы выбираете, должен будет звонить, монтируются для каждого раздела.
/proc/partitions
даст Вам список того, что обнаруживается:
# cat /proc/partitions
major minor #blocks name
8 0 1465138584 sda
8 1 1465134488 sda1
8 32 1465138584 sdc
8 33 1465134488 sdc1
8 16 1465138584 sdb
8 17 1465134488 sdb1
8 48 1465138584 sdd
8 49 1465134488 sdd1
8 64 156290904 sde
8 65 96358 sde1
8 66 4000185 sde2
8 67 1 sde3
8 69 2000061 sde5
8 70 14996646 sde6
8 71 135197527 sde7
Это то, где fdisk -l
получает его информацию. Вы могли использовать это, чтобы сделать что-то как:
awk '$4 ~ /^sda[0-9]+/{print $4}' /proc/partitions | while read dev; do
if findmnt /dev/$dev >/dev/null; then
echo "/dev/$dev is already mounted. Skipping."
continue
elif findmnt /media/$dev >/dev/null; then
echo "/media/$dev is already a mount point. Skipping /dev/$dev."
continue
fi
mount /dev/$dev /media/$dev
done
Вы можете сделать это с помощью скрипта AWK
:
awk '{ while (NR + shift < $1) { print (NR + shift) " NA"; shift++ }; print } END { shift++; while (NR + shift < 13) { print (NR + shift) " NA"; shift++ } }' /tmp/test1
даст необходимый вывод для / TMP / Test1
(Замените это с каждым файлом, который вы хотите обрабатывать).
В более читабельной форме:
#!/usr/bin/awk -f
{
while (NR + shift < $1) {
print (NR + shift) " NA"
shift++
}
print
}
END {
shift++
while (NR + shift < 13) {
print (NR + shift) " NA"
shift++
}
}
Сохранить это в качестве файла, скажем, Fill - отсутствует
, сделайте его исполняемым исполняемым, тогда вы можете просто запустить
./fill-missing /tmp/test1
скрипт, обрабатывает каждую строку, отслеживать Ожидаемая дельта с текущей строкой номер в Shift
. Таким образом, для каждой строки, если текущая строка скорректирована, не соответствует первому номеру в строке, он печатает соответствующий номер строки, за которым следует Na
и увеличивает дельту; После того, как строки номера совпадают, он печатает текущую строку. В конце процесса он печатает любые недостающие строки, необходимые для достижения 12.
Присоединяйтесь к
хорошо работает здесь:
join -a 1 -o 0,2.2 -e NA <(seq 12) A.txt 2>/dev/null
Я выбрасываю Стдерр, потому что присоединяется к
, если поле присоединения не , лексически отсортировано.
Файл awk
BEGIN { i=1 ; }
function upto(x) { while (i<x) printf "%d NA\n",i++ ;}
{ if ( $1 == i ) print ; upto($1) ; i++ ;}
END { upto(final+1) ;}
, который будет называться
awk -f nl.awk -v final=12 /tmp/test1
всей циклом
cd /my/directory
ls | while read f
do
awk -f ~/nl.awk -v final=12 $f > /an/other/dir/$f
done
, где
~ / nl. awk
) Также можно попробовать Python:
#!/usr/bin/env python2
with open('file.txt') as f:
check = 0
for line in f:
if int(line.split()[0]) == check + 1:
check = int(line.split()[0])
print line.rstrip()
else:
check = int(line.split()[0])
print int(line.split()[0]) - 1, 'NA'
print line.rstrip()
print int(line.split()[0]) + 1, 'NA'
print int(line.split()[0]) + 2, 'NA'
Здесь мы сравниваем номер строки int(line. split()[0])
с помощью check + 1
, мы установили начальное значение check
как 0
. Если значения равны, мы распечатали строку, в противном случае мы распечатали требуемое содержимое, т.е. пропущенный номер строки и NA
. Последние две строки используются для печати 11-й и 12-й строк.
Метод Гленна Джекмана bash
и join
с небольшими изменениями, эта функция получает счет из входного файла , и использует этот счет по умолчанию:
# Usage: inlwmv file [ missing_value [ extra_lines ] ]
# if unset, missing_value="NA", and extra_lines=0
inlwmv() { join -a 1 -o 0,2.2 -e "${2:-NA}" \
<(seq $((${3:-0} + $(tail -n 1 "$1" | cut -d ' ' -f1))) | sort -k 1b,1) \
<(sort -k 1b,1 "$1") | \
sort -g ; }
Для вопроса OP:
inlwmv A.file "" 2
Для этот повторяющийся вопрос версия Джекмана не работает на последнем значении файла , ( join
довольно требователен к упорядочиванию, но трехкратное использование sort
заставляет его вести себя так, как требуется):
inlwmv afile 0