0

基本上,我试图从三个包含唯一信息的文本文件中读取信息。

文本文件的设置方式是这样的:

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

我得到的结果是疯狂的错误,而不是我想要的。我不知道如何解决这个问题。

我希望能够通过变量形式调用信息。

4

3 回答 3

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

编辑:这是使用 pure 的解决方案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>&-
于 2012-07-19T13:22:47.130 回答
0

你看过使用paste吗?

例如

$ paste testA.txt testB.txt

等等。-d运算符将指定一个分隔符。

一个相关的实用程序是类似 SQL 的join,您可以在必须使用输入文件共有的字段进行连接的场景中使用它。

于 2012-07-19T13:24:23.577 回答
-1
head -2 /etc/hosts | tail -1 | awk '{print$2}'

文件名在哪里/etc/hosts
(head -2 )用于从文件中检索前 2 行。
(tail -1)用于仅检索从 输出的最后一行(head -2)
(awk '{print$2}')用于打印从 输出的行的第二列(tail -1)

于 2012-09-20T06:57:50.417 回答