【发布时间】:2016-06-08 13:26:47
【问题描述】:
我有以下内容,它忽略了仅带有 # 的行,但不忽略带有 \n 的行(空/仅包含换行符)
你知道我可以用一块石头击中两只鸟吗? IE。如果这些行不包含超过 1 个字符,则删除该行..
function check_duplicates {
awk '
FNR==1{files[FILENAME]}
{if((FILENAME, $0) in a) dupsInFile[FILENAME]
else
{a[FILENAME, $0]
dups[$0] = $0 in dups ? (dups[$0] RS FILENAME) : FILENAME
count[$0]++}}
{if ($0 ~ /#/) {
delete dups[$0]
}}
#Print duplicates in more than one file
END{for(k in dups)
{if(count[k] > 1)
{print ("\n\nDuplicate line found: " k) " - In the following file(s)"
print dups[k] }}
printf "\n";
}' $SITEFILES
awk '
NR {
b[$0]++
}
$0 in b {
if ($0 ~ /#/) {
delete b[$0]
}
if (b[$0]>1) {
print ("\n\nRepeated line found: "$0) " - In the following file"
print FILENAME
delete b[$0]
}
}' $SITEFILES
}
预期的输入通常如下。
#File Path's
/path/to/file1
/path/to/file2
/path/to/file3
/path/to/file4
#
/more/paths/to/file1
/more/paths/to/file2
/more/paths/to/file3
/more/paths/to/file4
/more/paths/to/file5
/more/paths/to/file5
在这种情况下,/more/paths/to/file5 出现了两次,应该这样标记。
但是,还有很多换行符,我宁愿忽略。
呃,它也必须是 awk,我正在做大量的后期处理,并且不想在这一点上与 awk 有所不同,如果可以的话:)
这似乎比我预期的要难一些。
干杯, 本
【问题讨论】:
-
顺便说一句,您可能希望改进格式,以便更轻松地遵循程序流程。
-
这也是一个完整的程序,因为您似乎从未设置 dups 数组或向其中添加任何内容?实际上我无法弄清楚你在这个脚本中想要做什么?你能发布这个脚本应该解决的问题吗?
-
以上更新。我想忽略 # 和 \n 字符,但不能让 \n 忽略。
-
Awk 看不到
\n,因为默认情况下它是 RS,并在读取记录时被丢弃。检查空行的方法是/^$/或/^[[:space;]]*$/如果可以有空格。 -
再次感谢小伙子的回答:D
标签: bash unix search awk newline