基本上我试图从三个包含唯一信息的文本文件中读取信息。
文本文件的设置方式如下:
textA.txt
----------------
something.awesome.com
something2.awesome.com
something3.awesome.com
...
textB.txt
----------------
123
456
789
...
textC.txt
----------------
12.345.678.909
87.65.432.1
102.254.326.12
....
现在,当我输出类似
的内容时,它会是什么样子something.awesome.com : 123 : 12.345.678.909
something2.awesome.com : 456 : 87.65.432.1
something3.awesome.com : 789 : 102.254.326.12
我现在正在尝试的代码是:
for each in `cat site.txt` ; do
site=`echo $each | cut -f1`
for line in `cat port.txt` ; do
port=`echo $line | cut -f1`
for this in `cat ip.txt` ; do
connect=`echo $this | cut -f1`
echo "$site : $port : $connect"
done
done
done
我得到的结果只是疯狂的错误,而不是我想要的。我不知道如何解决这个问题。
我希望能够通过变量形式调用信息。
答案 0 :(得分:7)
paste testA.txt testB.txt testC.txt | sed -e 's/\t/ : /g'
输出是:
something.awesome.com : 123 : 12.345.678.909 something2.awesome.com : 456 : 87.65.432.1 something3.awesome.com : 789 : 102.254.326.12
修改:以下是使用纯bash
的解决方案:
#!/bin/bash
exec 7<testA.txt
exec 8<testB.txt
exec 9<testC.txt
while true
do
read site <&7
read port <&8
read connect <&9
[ -z "$site" ] && break
echo "$site : $port : $connect"
done
exec 7>&-
exec 8>&-
exec 9>&-
答案 1 :(得分:0)
您是否看过使用paste?
e.g。
$ paste testA.txt testB.txt
等。 -d 运算符将指定分隔符。
相关实用程序是类似SQL的join,您可以在必须使用输入文件的公共字段加入的情况下使用它。
答案 2 :(得分:-1)
head -2 /etc/hosts | tail -1 | awk '{print$2}'
其中/etc/hosts
是文件的名称
(head -2 )
用于从文件中检索前2行
(tail -1)
用于仅检索从(head -2)
输出的最后一行
(awk '{print$2}')
用于打印从(tail -1)
输出的第2行。