Необходимо добавить пробел в конце каждой строки, используя скрипт оболочки Unix - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно добавить пробел в конце каждой строки, кроме строк заголовка. Ниже приведен пример моего файла:

13120000005000002100000000000000000000081D000
231200000000000    000     00XY018710V000000000                        
231200000000000    000     00XY018710V000000000
13120000012000007000000000000000000000081D000
231200000000000   000     00XY057119V000000000                        

Итак, 1-я и 4-я строки (начиная с 131200) - это моя строка заголовка ... Кроме моего заголовка, я хочу 7-8 пробелов в конце каждой строки.

Пожалуйста, найдите код, который я сейчас использую:

find_list=`find *.dat -type f`
Filename='*.dat'
filename='xyz'
for file in $find_list

do
 sed -i -e 's/\r$/         /' "$file"
  n=1
   loopcounterpre=""

newfile=$(echo "$filename" | sed -e 's/\.[^.]*$//')".dat"

while read line
do
        if [[ $line != *[[:space:]]* ]]

        then
                rowdetail=$line

                loopcounter=$( echo "$rowdetail" | cut -b 1-6) 
        if [[ "$loopcounterpre" == "$loopcounter" ]]
        then 
         loopcounterpre=$loopcounter
         #Increases the counter for  in the order of 001,002 and so on until the Pay entity is changed
         n=$((n+1))
        #Resets the Counter to 1 when the pay entity changes
        else
         loopcounterpre=$loopcounter
         n=1
        fi
        printf -v m "%03d" $n
        llen=$(echo ${#rowdetail})

        rowdetailT=$(echo "$rowdetail" | cut -b 1-$((llen-3)))
                ip=$rowdetailT$m
                echo "$ip" >> $newfile

        else
                rowdetail=$line
        echo "$rowdetail" >> $newfile
        fi

done < $file

bye
EOF

done

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Весь скрипт можно заменить одной строкой GNU sed:

sed -is '/^131200\|^1351000/!s/$/       /' $(find *.dat -type f)
0 голосов
/ 28 марта 2019

Использование awk:

$ awk '{print $0 ($0~/^(131200|1351000)/?"":"        ")}' file

print текущая запись $0 и, если она начинается с $0~/^(131200|1351000)/ print "" else : print " ".

...