shell 合并两个文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
fsckzy
V2EX    Linux

shell 合并两个文件

  •  1
     
  •   fsckzy 2018 年 1 月 5 日 4658 次点击
    这是一个创建于 2928 天前的主题,其中的信息可能已经有所发展或是发生改变。
    a 文件:
    10.200.187.81
    10.200.187.82
    10.200.187.83

    b 文件:
    root
    bin
    daemon
    root
    bin
    daemon
    root
    bin
    daemon

    要求输出:
    http://upload.ouliu.net/i/20180105155504cdzxx.png
    请教一下我,谢谢!
    22 条回复    2018-01-06 15:03:57 +08:00
    anthow
        1
    anthow  
       2018 年 1 月 5 日
    不会 shell 的话,用其他脚本不分分钟干完。。。
    fsckzy
        2
    fsckzy  
    OP
       2018 年 1 月 5 日
    @anthow 那指导一下我吧
    lslqtz
        3
    lslqtz  
       2018 年 1 月 5 日 via iPhone
    不会 shell,我的思路是取中间数,然后按给定的空格输出,到指定的中间行数时先输出 IP
    eccstartup
        4
    eccstartup  
       2018 年 1 月 5 日 via iPhone
    问题不太明确
    privil
        5
    privil  
       2018 年 1 月 5 日
    ……不算是两个文件 = =

    我随手写一个试试
    ```
    #!/bin/bash

    cat >>c <<eof
    root
    $i bin
    daemon

    eof
    done
    ```
    怎么对齐你自己看着办 = =
    aristotll
        6
    aristotll  
       2018 年 1 月 5 日
    @eccstartup #4 的确 建议用 python 写非常简单如果你需求可以的话
    privil
        7
    privil  
       2018 年 1 月 5 日
    #!/bin/bash

    for i in $(cat a);do
    cat >>c <<eof
    root
    $i bin
    daemon

    eof
    done

    我擦,少了一行 = =
    veelog
        8
    veelog  
       2018 年 1 月 5 日 via iPhone
    awk '{print "";print $0;print ""}' a.log|paste -d"" - b.log
    lululau
        9
    lululau  
       2018 年 1 月 5 日
    连规则都懒得描述吗。。。

    嗟!来食:

    paste <(gsed -n 'x;p;x;G;p' a) b
    veelog
        10
    veelog  
       2018 年 1 月 5 日 via iPhone
    cat b.log|paste a.log - - -
    这种格式更好点吧
    sutra
        11
    sutra  
       2018 年 1 月 5 日
    cat a | awk '{printf "\t\n%s\t\n\t\n", $1}' | paste -d " " - b
    omph
        12
    omph  
       2018 年 1 月 5 日
    输出的是个表格。
    是不是 A 的 1 行对应 B 的 3 行?
    privil
        13
    privil  
       2018 年 1 月 5 日
    @sutra #11 cat a | awk '{printf "#""\t\n%s\t\n""#""\t\n", $1}' | paste -d " " - b|column -t|sed 's/#/ /' 改进了下,对齐了= =
    cls1991
        14
    cls1991  
       2018 年 1 月 5 日
    awk '{printf "\t\t\n%s\t\n\t\t\n", $1}' a.txt | paste -d ' ' - b.txt | awk ' {print;} NR % 3 == 0 { print ""; }'

    `
    root
    10.200.187.81 bin
    daemon

    root
    10.200.187.82 bin
    daemon

    root
    10.200.187.83 bin
    daemon
    `
    应该跟需求一样了。
    Lpl
        15
    Lpl  
       2018 年 1 月 5 日
    ```
    #!/bin/bash

    rm c.txt

    ans=1
    while read LINE
    do
    read -a items <<< $LINE
    for ((i=0; i<3; i++))
    do
    tmp=`sed -n -e "$((${ans}+${i}))p" b.txt`

    if [ ${i} = 1 ]; then
    echo -e "${items[@]}\t\t${tmp}" >> c.txt
    else
    echo -e "\t\t\t${tmp}" >> c.txt
    fi
    done

    let ans+=3;
    done < a.txt

    cat c.txt | expand -t 8 >d.txt
    mv d.txt c.txt
    ```

    结果:
    Lpl
        16
    Lpl  
       2018 年 1 月 5 日
    上述第三行的
    rm c.txt

    修改为

    cat /dev/null > c.txt
    Lpl
        17
    Lpl  
       2018 年 1 月 5 日
    @sutra 我也改进下,cat a | awk '{printf "\t\n%s\t\n\t\n", $1}' | paste -d " " - b | expand -t 20 > d.txt
    对齐了...
    tees
        18
    tees  
       2018 年 1 月 5 日
    @privil
    cat a | awk '{printf "#""\t\n%s\t\n""#""\t\n", $1}' | paste -d " " - b|column -t|sed 's/#/ /'|sed 'N;N;/^$/d;G'

    加个空行.
    veelog
        19
    veelog  
       2018 年 1 月 5 日 via iPhone
    awk '{printf "%15 s\n%15 s\n%15 s\n", "",$0,"" }' a.log|paste -d"" - b.log
    sutra
        20
    sutra  
       2018 年 1 月 5 日
    @privil @Lpl @tees 这个问题好像要被玩坏了。
    CEBBCAT
        21
    CEBBCAT  
       2018 年 1 月 5 日
    一个问题不要发在两个节点喔!(目前)节点不是 Tag 的意思

    /t/420366
    /t/420375

    @Livid
    shihira
        22
    shihira  
       2018 年 1 月 6 日
    来看大 vim 无敌工作流

    cp a.txt c.txt; vim -c 'e c.txt | exe "normal ggVyP" | s/./ /g | let @q="Pjpj" | exe "normal A \<esc>dd3@q" | w | e b.txt | exe "normal gg\<C-V>G$y" | e c.txt | exec "normal gg$p" | wq'

    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2706 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:29 PVG 19:29 LAX 03:29 JFK 06:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86