Добавить текст после вывода du в csv - PullRequest
0 голосов
/ 06 июля 2018

Это мой код:

sizeFolder(){
  du -h --max-depth=1 --block-size=1M $TMP_DIR | sort -hr | awk '{print $1,$2}'
}

Это мой вывод:

 ----------------------------
 Fr 6. Jul 10:37:16 CEST 2018
 ----------------------------
 ;
 PV Size /PV Name
 ;
 3775 /usr add (line 1 from textfile)
 1805 /usr/share add (line 2 from textfile)
 1382 /usr/lib add (line 3 from textfile)
 384 /usr/src
 176 /usr/bin
 17 /usr/sbin
 13 /usr/include
 1 /usr/local
 1 /usr/games
 ;

Как добавить текстовые строки из простого текстового файла к имени пути, как указано в выводе?

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Используя paste это может быть очень просто:

paste -d' ' <(sizeFolder) test.txt

Это не заботится о заголовке в выходном примере, но так как ваш код не производит его, я предполагаю, что он будет добавлен чем-то другим (окружающий скрипт, например). Просто убедитесь, что этот скрипт все еще делает это после того, как paste было сделано.

0 голосов
/ 06 июля 2018

script.sh

sizeFolder(){
  # read simple text (given as argument $1)
  IFS=$'\n' read -d '' -r -a simpletext < "$1"
  # read output from du
  IFS=$'\n' read -d '' -r -a duoutput < <(du -h --max-depth=1 --block-size=1M /TMP_DIR | sort -hr | awk '{print $1,$2}')
  len=${#simpletext[@]}
  # loop over both variables
  for ((i=0;i<=$len;i++))
  do
    echo "${duoutput[$i]} ${simpletext[$i]}"
  done
}
sizeFolder "$1"

Звоните:

script.sh simpletext.txt
0 голосов
/ 06 июля 2018

Изменение:

awk '{print $1,$2}'

до:

awk 'NR==FNR{a[NR]=$0; next} {print $1, $2, a[FNR]}' textfile -
0 голосов
/ 06 июля 2018

Вы можете попробовать что-то вроде (используя bash):

i=1
file="..." # replace the value by your file path
max="$(cat $file|wc -l)"
while read -r; do 
  if [[ $REPLY =~ ^[0-9]+ ]]; then 
    [[ $i -le $max ]] && echo "${REPLY} add $(head -n $i $file|tail -n 1)" || echo "${REPLY}"
    (( i++ ))
  else 
    echo "${REPLY}"; 
  fi; 
done < <(sizeFolder)

Конечно, есть много других решений (например, awk).

Демо-версия:

$ cat test.txt 
----------------------------
Fr 6. Jul 10:37:16 CEST 2018
----------------------------
;
PV Size /PV Name
;
3775 /usr
1805 /usr/share
1382 /usr/lib
384 /usr/src
176 /usr/bin
17 /usr/sbin
13 /usr/include
1 /usr/local
1 /usr/games
;
$ cat test2.txt 
line1
line2
line3
$ i=1; while read -r; do if [[ $REPLY =~ ^[0-9]+ ]]; then [[ $i -le $(cat test2.txt|wc -l) ]] && echo "${REPLY} add $(head -n $i test2.txt|tail -n 1)" || echo "${REPLY}"; (( i++ )); else echo "${REPLY}"; fi; done < test.txt 
----------------------------
Fr 6. Jul 10:37:16 CEST 2018
----------------------------
;
PV Size /PV Name
;
3775 /usr add line1
1805 /usr/share add line2
1382 /usr/lib add line3
384 /usr/src
176 /usr/bin
17 /usr/sbin
13 /usr/include
1 /usr/local
1 /usr/games
;
$
...