-1

基本上我试图比较两个文件的输出(一个来自使用标准工具将.cpio文件转换为布局格式的PC,另一个来自使用busybox工具的嵌入式设备),它们都产生文件系统文件/目录布局以“ls -l”格式。但是我现在遇到的问题是嵌入式设备的输出打印了带有一些大小信息的目录,而 .cpio 不存在。

因此,我决定将目录内容行替换为 size 列的 0 字节大小。

设备输出:-

drwxrwxr-x    2 root     root          5512 Aug 22  2013 bin
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/addgroup -> busybox
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/adduser -> busybox
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/ash -> busybox

电脑输出:-

drwxrwxr-x   2 root     root            0 Aug 22 09:32 bin
lrwxrwxrwx   1 root     root            7 Aug 22 09:24 bin/addgroup -> busybox
lrwxrwxrwx   1 root     root            7 Aug 22 09:24 bin/adduser -> busybox
lrwxrwxrwx   1 root     root            7 Aug 22 09:24 bin/ash -> busybox

通过比较输出,我有两个问题需要解决。

1) 目录大小未正确显示,我想在设备端使用 awk/sed 将其替换为“0”。

2)同样的'09:32'时间需要替换为'2013',如果我知道如何做第一个,我会自己做第二个。

请分享你的想法来解决这个问题。

4

2 回答 2

2
$ cat foo.input
drwxrwxr-x    2 root     root          5512 Aug 22  2013 bin
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/addgroup -> busybox
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/adduser -> busybox
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/ash -> busybox

$ cat foo2.input
drwxrwxr-x   2 root     root            0 Aug 22 09:32 bin
lrwxrwxrwx   1 root     root            7 Aug 22 09:24 bin/addgroup -> busybox
lrwxrwxrwx   1 root     root            7 Aug 22 09:24 bin/adduser -> busybox
lrwxrwxrwx   1 root     root        12345 Aug 22 09:24 bin/ash -> busybox

$ diff <(awk '/^d/{$5=0}{$6=$7=$8=""}1' foo.input) <(awk '/^d/{$5=0}{$6=$7=$8=""}1' foo2.input)
4c4
< lrwxrwxrwx 1 root root 7    bin/ash -> busybox
---
> lrwxrwxrwx 1 root root 12345    bin/ash -> busybox
  • /^d/{$5=0}0如果行匹配^d(= 以d= 目录开头),则将字段(列)5 设置为
  • {$6=$7=$8=""}删除所有行的字段 6、7、8,因为您想忽略输出中的日期
  • 打印结果diff及其输出
于 2013-08-27T10:57:43.023 回答
1

保持间距:

$ awk '
    BEGIN{ preRE="^([^[:space:]]+[[:space:]]+){4}" }
    /^d/{
        match($0,preRE)
        preLgth=RLENGTH

        match($0,preRE "[^[:space:]]+")
        strLgth=RLENGTH-preLgth

        $0 = substr($0,1,preLgth) sprintf("%*s",strLgth,0) substr($0,preLgth+strLgth+1)
    }
    1
' file
drwxrwxr-x    2 root     root             0 Aug 22  2013 bin
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/addgroup -> busybox
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/adduser -> busybox
lrwxrwxrwx    1 root     root             7 Aug 22  2013 bin/ash -> busybox
于 2013-08-27T13:49:07.533 回答