записать значение в определенную строку и столбец с помощью оболочки - PullRequest
0 голосов
/ 25 мая 2018

Я очень новичок в написании сценариев оболочки, задачи в моей руке разделены на 2 сценария оболочки.

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

Первый сценарий оболочки содержит:

  1. Объединение около 90 файлов .lvm, хранящихся в папке.

  2. Обрезает каждый .lvm файл, удаляет заголовок и кадрирует до конца данных.

Теперь мне нужно один раз напечатать значение в 18-м столбцекаждый файл был повторен, чтобы различать конец файла (здесь я пытаюсь написать 500)

#!/bin/sh
clear
for file in "$1/"*.lvm; do
    a=$(awk '/X_Value/{ print NR; exit }' "$file")
    b=$(awk 'END {print NR}' "$file")
    awk '{OFS= "\t"} {NR==$b $18,"500"}' "$file"
    #specified row is $b and column number is 18
    sed "s|\$a|${b}|" "$file"
done

Второй сценарий оболочки содержит:

  1. Чтение определенных столбцов изпервый сценарий оболочки.

Что такое:

#!/bin/sh
clear
while read line; do
   sleep 1
   awk -v OFS='\t' '{print $1, $2, $3, $8, $18}'
done

Выводить сейчас:

file1  196287,265000    3,902977    -39,226354  0,873427  
file1  196287,266000    3,890747    -51,032699  0,519405
file1  196287,267000    3,900080    -51,472975  -0,446108
....
....
....
file2 196287,268000 3,904586    -50,627182  -0,092086
file2 196287,269000 3,870793    -30,687314  1,195265
file2 196287,270000 3,897505    -30,073244  0,744692
....
....

Желаемый вывод:

file1  196287,265000    3,902977    -39,226354  0,873427     0
file1  196287,266000    3,890747    -51,032699  0,519405     0
file1  196287,267000    3,900080    -51,472975  -0,446108    500
...
...
...
file2 196287,268000 3,904586    -50,627182  -0,092086  0
file2 196287,269000 3,870793    -30,687314  1,195265   0
file2 196287,270000 3,897505    -30,073244  0,744692   500
...
...

1 Ответ

0 голосов
/ 30 мая 2018

Я не люблю awk.Я не использую awk.Издевайся надо мной.Если bash не может что-то обработать, я переписываю это на perl.= о)

Тем не менее, вот неуклюжая версия с полностью башом.Много улучшений предстоит сделать, но работа мешает мне веселиться, смеется

nl="
"
for f in "$1/"*.lvm
do typeset out=''
   while read a b c d e
   do out="$out$( printf "%-25s%14s%14s%14s%14s%14s" $f $a $b $c $d $e )$nl"
   done <<< "$(cut -f 1,2,3,8,18 -d '   ' $f )"
   stack="$stack$nl$(printf "${out% *} 500$nl")"
done
echo "$stack"|grep -v '^$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...