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

发布于 2024-12-11 22:33:06 字数 424 浏览 0 评论 0原文

我是 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 shell 脚本中,使用 awk、sed、grep 等过滤器,使用管道和 Linux 重定向运算符...

限制

最好单行,否则越少越好。尽可能多的线路

I am new to this shell-script programming so need your help to write a code which is efficient one.

Input file format :

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

Output File format:

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

I want to convert input file to output file and vice-versa so need code for both sides.

Code should be in linux shell script using filters like awk,sed,grep,etc using pipe and linux redirection operators...

Limitation

A single line would be best otherwise as much lesser no. of lines as possible

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

肤浅与狂妄 2024-12-18 22:33:06

这是这个问题的一个相当简单的解决方案。

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 这样的正则表达式应该可以解决问题。

Here's a rather simple solution to this problem.

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

I'm not sure if you need to insert a new line after 8 blocks, but if so, a regex like s/(.*){32}/$1\n/g should do the trick.

私藏温柔 2024-12-18 22:33:06

在 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

It can be very simple in bash:

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

If you need the newlines:

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

Or, with awk

awk '
    {printf("%s%s %s%s ", $1, $2, $3, $4)}
    NR % 4 == 0 {print ""}
' file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文