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
请教一下我,谢谢!
不会 shell 的话,用其他脚本不分分钟干完。。。
那指导一下我吧
不会 shell,我的思路是取中间数,然后按给定的空格输出,到指定的中间行数时先输出 IP
问题不太明确
……不算是两个文件 = =
我随手写一个试试
```
>>c <
root
$i bin
daemon
eof
done
```
怎么对齐你自己看着办 = =
的确 建议用 python 写非常简单如果你需求可以的话
i in $(cat a);do
cat >>c <
root
$i bin
daemon
eof
done
我擦,少了一行 = =
awk '{print "";print $0;print ""}' a.log|paste -d"" - b.log
连规则都懒得描述吗。。。
嗟!来食:
paste <(gsed -n 'x;p;x;G;p' a) b
cat b.log|paste a.log - - -
这种格式更好点吧
cat a | awk '{printf "\t\n%s\t\n\t\n", $1}' | paste -d " " - b
输出的是个表格。
是不是 A 的 1 行对应 B 的 3 行?
cat a | awk '{printf "$1}' | paste -d " " - b|column -t|sed 's//' 改进了下,对齐了= =
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
`
应该跟需求一样了。
```
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
```
结果:
上述第三行的
rm c.txt
修改为
cat /dev/null > c.txt
我也改进下,cat a | awk '{printf "\t\n%s\t\n\t\n", $1}' | paste -d " " - b | expand -t 20 > d.txt
对齐了...
cat a | awk '{printf "$1}' | paste -d " " - b|column -t|sed 's//'|sed 'N;N;/^$/d;G'
加个空行.
awk '{printf "%15 s\n%15 s\n%15 s\n", "",$0,"" }' a.log|paste -d"" - b.log
这个问题好像要被玩坏了。
一个问题不要发在两个节点喔!(目前)节点不是 Tag 的意思
/t/420366
/t/420375
@Livid
来看大 vim 无敌工作流
cp a.txt c.txt; vim -c 'e c.txt | exe "normal ggVyP" | s/./ /g | let @q="Pjpj" | exe "normal A \
[email&| w | e b.txt | exe "normal gg\G$y" | e c.txt | exec "normal gg$p" | wq'
