- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以这有点棘手,我费了好大劲才弄明白。
我有两个不同的文件,一个是这样的 rackdiag 格式:
#file1
rackdiag {
rack {
42U;
description = "1.1.1";
1: "serverone" [4U];
5: servertwo [2U];
7: serverthree\nblah [3U];
}
rack {
42U;
description = "1.1.2";
1: servertwoone [4U];
5: "servertwotwo" [2U];
}
}
等等
另一个是服务器名称列表,如下所示:
#file2
serverone.domain.com
servertwo.domain.com
serverthree.domain.com
我正在尝试匹配两个文件之间的字符串,并将具有匹配字符串的行从第一个文件插入到第二个文件的末尾,并添加一些内容。我希望它在第二个文件中像这样结束:
serverone.domain.com #1.1.1 1: "serverone" [4U];
servertwo.domain.com #1.1.1 5: servertwo [2U];
servertwoone.domain.com #1.1.2 1: servertwoone [4U];
我设法做到了这一点:
#!/bin/bash
cat serverlist.txt | while read line;
do
#grep for matching strings and output entire line when match found to $line2 variable
line2=$(grep -w "$line" row01.txt)
echo "$line "#" $line2"
done > halp.txt
exit
输出这个:
servertwo.domain.com #5: servertwo.domain.com [2U];
但我注意到由于某种原因它缺少一些应该匹配的内容。
比如,在实际文件中我有这一行
33: servername [2U];
第二个文件中的这一行:
servername.blahhosting.com
当我尝试运行脚本时,输出仅为:
servername.blahhosting.com #
谁能帮我让 1.1.1/1.1.2 等出现在输出中,并弄清楚为什么它可能会丢失一些匹配的行?
非常感谢!
编辑 1:
rackdiag {
rack {
42U;
description = "5.1.1";
1: servertwoone [4U];
1: "servertwoone" [4U];
1: servertwoone\nserveronetwo [4U];
1: "servertwoone\nserveronetwo" [4U];
1: servertwo-1\nserverone1 [4U];
1: "servertwo-2\nserverone2" [4U];
1: servertwoone-1 [4U];
1: servertwoone-2 [4U];
1: servertwoone1 [4U];
1: servertwoone2 [4U];
1: servertwoone;
}
rack {
42U;
description = "5.1.2";
1: server two one [4U];
1: servertwoone [4U];
1: server.two.one [4U];
}
}
如果没有[2U]等,最后是空白的,就是[1U]
如果名称带有\n,则表示服务器在物理外壳上有多个标签。我想就是这样
最佳答案
您的问题不清楚,但这是解决问题的正确方法和开始:
$ cat tst.awk
NR==FNR {
if ( $1 == "description" ) {
desc = $NF
gsub(/^"|";$/,"",desc)
}
else if ( $1 ~ /^[0-9]+:/ ) {
nmbr = $1
sub(/^[[:space:]]*[^[:space:]]+[[:space:]]+/,"")
if ( $NF ~ /\[.*\];$/ ) {
blob = $NF
sub(/[^[:space:]]+$/,"")
}
else {
blob = "[1U];"
}
sub(/[[:space:]]+$/,"")
numSrvrs = split($0,srvrs,/\\n/)
for (srvrNr=1; srvrNr<=numSrvrs; srvrNr++) {
srvr = srvrs[srvrNr]
gsub(/^"|"$/,"",srvr)
srvr2data[srvr] = "#" desc " " nmbr " " $0 " " blob
printf "TRACE: srvr2data[%s] = <%s>\n", srvr, srvr2data[srvr]
}
}
next
}
{
srvr = $0
sub(/\..*/,"",srvr)
print $0, srvr2data[srvr]
}
针对您的前 2 个样本输入文件运行时:
$ awk -f tst.awk file1 file2
TRACE: srvr2data[serverone] = <#1.1.1 1: "serverone" [4U];>
TRACE: srvr2data[servertwo] = <#1.1.1 5: servertwo [2U];>
TRACE: srvr2data[serverthree] = <#1.1.1 7: serverthree\nblah [3U];>
TRACE: srvr2data[blah] = <#1.1.1 7: serverthree\nblah [3U];>
TRACE: srvr2data[servertwoone] = <#1.1.2 1: servertwoone [4U];>
TRACE: srvr2data[servertwotwo] = <#1.1.2 5: "servertwotwo" [2U];>
serverone.domain.com #1.1.1 1: "serverone" [4U];
servertwo.domain.com #1.1.1 5: servertwo [2U];
serverthree.domain.com #1.1.1 7: serverthree\nblah [3U];
当使用您的第三个输入文件(Edit 1
在您的问题中)并且没有关联的“file2”(因为您没有提供)运行时,您得到的只是作为数据的跟踪输出从第一个文件开始填充:
$ awk -f tst.awk file3 /dev/null
TRACE: srvr2data[servertwoone] = <#5.1.1 1: servertwoone [4U];>
TRACE: srvr2data[servertwoone] = <#5.1.1 1: "servertwoone" [4U];>
TRACE: srvr2data[servertwoone] = <#5.1.1 1: servertwoone\nserveronetwo [4U];>
TRACE: srvr2data[serveronetwo] = <#5.1.1 1: servertwoone\nserveronetwo [4U];>
TRACE: srvr2data[servertwoone] = <#5.1.1 1: "servertwoone\nserveronetwo" [4U];>
TRACE: srvr2data[serveronetwo] = <#5.1.1 1: "servertwoone\nserveronetwo" [4U];>
TRACE: srvr2data[servertwo-1] = <#5.1.1 1: servertwo-1\nserverone1 [4U];>
TRACE: srvr2data[serverone1] = <#5.1.1 1: servertwo-1\nserverone1 [4U];>
TRACE: srvr2data[servertwo-2] = <#5.1.1 1: "servertwo-2\nserverone2" [4U];>
TRACE: srvr2data[serverone2] = <#5.1.1 1: "servertwo-2\nserverone2" [4U];>
TRACE: srvr2data[servertwoone-1] = <#5.1.1 1: servertwoone-1 [4U];>
TRACE: srvr2data[servertwoone-2] = <#5.1.1 1: servertwoone-2 [4U];>
TRACE: srvr2data[servertwoone1] = <#5.1.1 1: servertwoone1 [4U];>
TRACE: srvr2data[servertwoone2] = <#5.1.1 1: servertwoone2 [4U];>
TRACE: srvr2data[servertwoone;] = <#5.1.1 1: servertwoone; [1U];>
TRACE: srvr2data[server two one] = <#5.1.2 1: server two one [4U];>
TRACE: srvr2data[servertwoone] = <#5.1.2 1: servertwoone [4U];>
TRACE: srvr2data[server.two.one] = <#5.1.2 1: server.two.one [4U];>
您没有告诉我们“[4U]”字段是什么,所以我将其命名为blob
- 显然将其更改为任何名称。
关于linux - 匹配两个文件中的字符串,并将第一个文件中匹配字符串的行追加到第二个文件的行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51557336/
我正在尝试使用 opencsv 库将 SQL 结果集导出到以逗号分隔的 csv 文件。但是,当我将结果集传递给 writeAll 函数时,除了它生成的文件不会用新行分隔行并在记事本中打开时创建一个几乎
所以我有一个包含混合行结尾的文件。我只需要删除 linux 换行符 (LF),但只保留 Windows 行结尾 (RFLF)。任何可以做到这一点的快速 bash one liner? 最佳答案 如果要
所以我有一个包含混合行结尾的文件。我只需要删除 linux 换行符 (LF),但只保留 Windows 行结尾 (RFLF)。任何可以做到这一点的快速 bash one liner? 最佳答案 如果要
嗨,我正在尝试将行尾代码以 CSV 格式放入,以将其导入到 Excel 我尝试放入 \n、“\n”、\r、“\r”、\r\n、“\r\n”但对我没有任何作用我试图将其导入 excel 2013 我的
while ((client = accept(sock, (struct sockaddr *) &c, (socklen_t *) &clientlength)) > 0) { int h =
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在从 LINUX(Debian) 读取一个 ASCII 文件到 Python CGI 脚本中,然后通过网页对其进行编辑然后保存, 如果我使用图形文本编辑器,编辑和未编辑的文件看起来是一样的,并且格
我有一个包含 n 列 y 行二进制值的文本文件。 我正在使用 getline 提取二进制值的每一行并将它们分配给 vector : 我正在使用 getline 提取文件的每一行,其中每一行由一系列由空
这个行尾问题让我抓狂... 背景:过去,我使用的是 core.autocrlf 设置,但我发现我遇到了不同的存储库表现不佳的问题(我在 Windows 上工作,我有一些需要 LF 结尾的存储库和一些需
我们有大量在不同平台上使用 CVS 的程序员。 我们有开发人员使用带 TortoiseCVS 的 Windows(它使用 cvsNT) 我们有开发者使用 ubuntu 8.04 我们的开发人员有两个盒
目前,我正在使用以下命令来更改 dos2unix 行尾,但这是针对 file-y 文件... sed -i 's/\r//' filename 有没有办法对目录中的所有文件运行此命令? 最佳答案 fo
我正在尝试将换行符 append 到已存在的文件中,但我尝试过的所有命令都导致仅 append 到第一行。我希望文件中的输出看起来像 行1 行2 private void addToFavToFil
我正在尝试将文件中的文本读入数组,然后将每个数组索引的内容输出到输出文件。我需要读取/存储数据直到它到达行尾,此时它应该重新开始读取/存储并重新使用数组进行临时存储,只输出到输出文件。 我不能使用 g
我在 PC 上安装了 Linux Mint,然后从 Bitbucket 克隆了 git 存储库以在其上运行。经过一些更改后,我确实在我的 PhpStorm ide 中提交了。在此提交期间,git 向我
我正在阅读有关 gcc 预处理的文档,我阅读了以下句子 ( here ): If the last line of any input file lacks an end-of-line marker
我们所有的开发人员都在 Windows 机器上工作,而构建是在 Linux 上完成的。 为了符合真正的方式,我们决定标准化行结尾并遵循场景 described on GitHub . 后来发现,有时从
出于某些原因,我的一个文件包含旧样式的mac行结尾(在osx上编辑后)。这些是“CR”(回车)字符,在git diff中显示为^m。 git不理解它们是行尾代码(真的有多难?)并将整个文件解释为一行。
为什么这段代码不起作用? b if b = true 错误:未定义局部变量或方法“b” 但是这样做: if b = true b end 他们不应该是一样的吗? 最佳答案 这是一个很好的问题。
我正在 checkout 具有Linux样式行结尾的文件(仅LF char)。当我在Windows中使用TortoiseSVN checkout 文件时,它将行尾转换为Windows样式(CR + L
我有一个 Windows 文本文件,其中包含一行(以 CRLF 结尾) aline 以下是几个命令的输出: [root@panel ~]# grep aline file.txt aline [roo
我是一名优秀的程序员,十分优秀!