shell 合并两个文件

2018-01-05 15:58:27 +08:00
 fsckzy
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
请教一下我,谢谢!
4130 次点击
所在节点    Linux
22 条回复
anthow
2018-01-05 16:04:53 +08:00
不会 shell 的话,用其他脚本不分分钟干完。。。
fsckzy
2018-01-05 16:07:04 +08:00
@anthow 那指导一下我吧
lslqtz
2018-01-05 16:21:23 +08:00
不会 shell,我的思路是取中间数,然后按给定的空格输出,到指定的中间行数时先输出 IP
eccstartup
2018-01-05 16:27:47 +08:00
问题不太明确
privil
2018-01-05 16:28:41 +08:00
……不算是两个文件 = =

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

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

eof
done
```
怎么对齐你自己看着办 = =
aristotll
2018-01-05 16:29:11 +08:00
@eccstartup #4 的确 建议用 python 写非常简单如果你需求可以的话
privil
2018-01-05 16:29:15 +08:00
#!/bin/bash

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

eof
done

我擦,少了一行 = =
veelog
2018-01-05 16:29:54 +08:00
awk '{print "";print $0;print ""}' a.log|paste -d"" - b.log
lululau
2018-01-05 16:30:14 +08:00
连规则都懒得描述吗。。。

嗟!来食:

paste <(gsed -n 'x;p;x;G;p' a) b
veelog
2018-01-05 16:31:18 +08:00
cat b.log|paste a.log - - -
这种格式更好点吧
sutra
2018-01-05 16:32:45 +08:00
cat a | awk '{printf "\t\n%s\t\n\t\n", $1}' | paste -d " " - b
omph
2018-01-05 16:33:16 +08:00
输出的是个表格。
是不是 A 的 1 行对应 B 的 3 行?
privil
2018-01-05 16:40:12 +08:00
@sutra #11 cat a | awk '{printf "#""\t\n%s\t\n""#""\t\n", $1}' | paste -d " " - b|column -t|sed 's/#/ /' 改进了下,对齐了= =
cls1991
2018-01-05 16:59:31 +08:00
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
2018-01-05 17:11:41 +08:00
```
#!/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
2018-01-05 17:12:33 +08:00
上述第三行的
rm c.txt

修改为

cat /dev/null > c.txt
Lpl
2018-01-05 17:15:44 +08:00
@sutra 我也改进下,cat a | awk '{printf "\t\n%s\t\n\t\n", $1}' | paste -d " " - b | expand -t 20 > d.txt
对齐了...
tees
2018-01-05 17:25:46 +08:00
@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
2018-01-05 17:27:23 +08:00
awk '{printf "%15 s\n%15 s\n%15 s\n", "",$0,"" }' a.log|paste -d"" - b.log
sutra
2018-01-05 18:04:12 +08:00
@privil @Lpl @tees 这个问题好像要被玩坏了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/420366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX