我是这个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等过滤器......
限制
单行是最好的,否则就更少了。尽可能的线条
答案 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