我将数据库中已存在的冲突数字的输出与新的插入请求排序到文件名输出。 这是文件的输出。
cat output
DataBase: (9999999999) NewDB_insert: (999-999-9999)
DataBase: (1111111111) NewDB_insert: (111-111-1111)
DataBase: (2222222222) NewDB_insert: (222-222-2222)
DataBase: (3333333333) NewDB_insert: (333-333-3333)
我想运行相同的命令,显示来自具有冲突的同一行的信息。该命令只是提取数据库信息。
showinfo -id 9999999999
ID:9999999999
Name: Mr.Brown
City: New York
Company: Acme
Client: 1245
showinfo -id 999-999-9999
ID:999-999-9999
Name: Mr.Brown
City: New York
Company: Acme
Client: 1245
我想使用2个变量将输出从名为output的文件发送到屏幕。所以我会从我的文件中获得以下信息。
**From DB:**
ID:9999999999
Name: Mr.Brown
City: New York
Company: Acme
Client: 1245
**From NewDB_insert:**
showinfo -id 999-999-9999
ID:999-999-9999
Name: Mr.Brown
City: New York
Company: Acme
Client: 1245
所以基本上我会在一个带有一个变量的for循环中捕获文件。
for i in `cat output | awk '{print $2}' | tr -d ")("`;do echo == From DB:==;showinfo -id $i; echo ==========;done
这给了我所需要的第一部分。我在网上查看并且无法使用任何示例来创建包含2个变量的for循环。任何帮助,将不胜感激。
答案 0 :(得分:2)
简短的回答可能是:“你没有”。
您可能最好使用while
圈read
。
sed -e 's/[^(]*(\([^)]*\))[^(]*(\([^)]*\)).*/\1 \2/' output |
while read a b
do
echo == From DB ==
showinfo -id $a
echo =============
echo == From NewDB_Insert ==
showinfo -id $b
echo =======================
done
如果您认为数据中可能存在令人讨厌的字符,尤其是反斜杠,则可以使用read -r
,并在"$a"
行中引用"$b"
和showinfo
。如果你确定不会有任何这样的字符,你可以(只是)用所写的代码确定。
请注意,循环完成时,无法访问在while
循环中设置的任何变量。如果问题确实存在问题,可以解决这个问题。
sed
脚本查找:
并将其替换为两个以空格分隔的捕获字符串(例如9999999999
和999-999-9999
)。