使用linux过滤器更改文件格式

时间:2011-10-26 16:19:28

标签: bash shell awk pipe

我是这个shell脚本编程的新手,所以需要你的帮助来编写一个高效的代码。

输入文件格式:

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重定向操作符,代码应该在linux shell脚本中使用awk,sed,grep等过滤器......

限制

单行是最好的,否则就更少了。尽可能的线条

2 个答案:

答案 0 :(得分:2)

这是一个解决这个问题的简单方法。

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 :(得分:1)

在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