2011-10-26 14 views
0

私はこのシェルスクリプトプログラミングの初心者ですので、効率的なコードを書くために助けが必要です。linuxフィルタを使用してファイル形式を変更する

入力ファイル形式:

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を、のようなフィルタを使用して、Linuxのシェルスクリプトにする必要があります...

制限

一行は、そうでない限り最善だろう少ない。できるだけ多くの行を入れてください。

+1

で、以前を含める_please_恐ろしいか壊れたかのようにあなたが試みた。これは、あなたがどこにいるのかを正確に理解するのに役立ちます。これにより、あなたの問題を解決するだけでなく、何かを解決する答えを書くことができます。 –

+0

@TimPost okk ..ありがとうございます。私は将来このことを念頭に置いています... –

答えて

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のような正規表現は、トリックを行う必要があります。

+0

ya私は8ブロック後に改行文字が必要です。そして、この正規表現を置き換える8ブロックをどのように数えますか?それを編集してください。 –

+0

k申し訳ありません私はこの32がすでに数えていると思います。むしろ最初に試してみるべきです.Thanx nは申し訳ありません –

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 
関連する問題