Вставьте новые строки с отсутствующими значениями (NA)

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
6
11.07.2016, 19:22
5 ответов

Вы можете сделать это с помощью скрипта 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.

3
27.01.2020, 20:23

Присоединяйтесь к хорошо работает здесь:

join -a 1 -o 0,2.2 -e NA  <(seq 12)  A.txt  2>/dev/null

Я выбрасываю Стдерр, потому что присоединяется к , если поле присоединения не , лексически отсортировано.

5
27.01.2020, 20:23

Файл 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

, где

  • вы поместите программу awk в вашем доме до дома ( ~ / nl. awk )
2
27.01.2020, 20:23

Также можно попробовать 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-й строк.

2
27.01.2020, 20:23

Метод Гленна Джекмана 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
0
27.01.2020, 20:23

Теги

Похожие вопросы