Изменить формат файла с помощью фильтров Linux - PullRequest
0 голосов
/ 26 октября 2011

Я новичок в этом программировании сценариев оболочки, поэтому мне нужна ваша помощь, чтобы написать эффективный код.

Формат входного файла:

60 00 00 00
00 90 32 20
00 00 00 00
.....

Формат выходного файла:

6000 0000 0090 3220 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000 
......

Я хочу преобразовать входной файл в выходной файл и наоборот, поэтому нужен код для обеих сторон.

Код должен быть написан в сценарии оболочки Linux с использованием фильтров типа awk, sed, grep и т. Д. С использованием операторов перенаправления pipe и linux ...

Ограничение

Одна строка была бы лучше, иначе гораздо меньше нет. линий как можно

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Вот довольно простое решение этой проблемы.

while read line; do
   block1=`echo $line | awk '{ print $1$2 }'`
   block2=`echo $line | awk '{ print $3$4 }'`
   echo "$block1 $block2 " >> outputfile
done < inputfile

Я не уверен, нужно ли вам вставлять новую строку после 8 блоков, но если это так, регулярное выражение типа s/(.*){32}/$1\n/g должно сработать.

1 голос
/ 26 октября 2011

В bash это может быть очень просто:

while read a b c d; do printf "%s%s " $a $b $c $d; done < file

Если вам нужны новые строки:

i=0
while read a b c d; do
    printf "%s%s " $a $b $c $d
    if (( ++i == 4 )); then 
        echo
        i=0
    fi
done < file

Или с awk

awk '
    {printf("%s%s %s%s ", $1, $2, $3, $4)}
    NR % 4 == 0 {print ""}
' file
...