Bash AWK查找行是换行还是换行#
我有以下内容,它忽略了带有#的行,而不是带有\n的行(空/仅包含换行符) 你知道我能一石二鸟的方法吗? 即,如果行包含的字符数不超过1个,则删除该行Bash AWK查找行是换行还是换行#,bash,unix,search,awk,newline,Bash,Unix,Search,Awk,Newline,我有以下内容,它忽略了带有#的行,而不是带有\n的行(空/仅包含换行符) 你知道我能一石二鸟的方法吗? 即,如果行包含的字符数不超过1个,则删除该行 function check_duplicates { awk ' FNR==1{files[FILENAME]} {if((FILENAME, $0) in a) dupsInFile[FILENAME] else {a[FILENAME, $0] du
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有所不同:)
这真的比我想象的要困难一些
干杯,
Ben您可以将
if
和组合成一个正则表达式
if ($0 ~ /#|\n/) {
delete dups[$0]
}
或
更具体地说,你可以写
if ($0 ~ /^#?$/) {
delete dups[$0]
}
它的作用
^
匹配行首
#?
匹配一个或零个#
$
与行尾匹配
因此,^$
匹配空行,^#$
只匹配
您可以将if
和组合成一个正则表达式
if ($0 ~ /#|\n/) {
delete dups[$0]
}
或
更具体地说,你可以写
if ($0 ~ /^#?$/) {
delete dups[$0]
}
它的作用
^
匹配行首
#?
匹配一个或零个#
$
与行尾匹配
因此,^$
匹配空行,^#$
只匹配带有
的行,作为一种旁白,您可能希望改进格式,以便更容易遵循程序流程。这也是一个完整的程序,因为您似乎从未设置dups数组或向其中添加任何内容?事实上,我根本搞不懂你在这个脚本中想做什么?你能发布这个脚本应该解决的问题吗?上面的更新。我想忽略#和\n字符,但无法让\n字符忽略。Awk无法看到\n
,因为默认情况下它是RS,在读取记录时会被丢弃。检查空行的方法是/^$/
或/^[:space;]]*$/
(如果可以有空格)。再次感谢guy's,答案是:作为一种旁白,您可能希望改进格式,以便更容易地遵循程序流程。这也是一个完整的程序,因为您从未设置dups数组或向其添加任何内容?事实上,我根本搞不懂你在这个脚本中想做什么?你能发布这个脚本应该解决的问题吗?上面的更新。我想忽略#和\n字符,但无法让\n字符忽略。Awk无法看到\n
,因为默认情况下它是RS,在读取记录时会被丢弃。检查空行的方法是/^$/
或/^[:space;]]*$/
(如果可以有空格)。再次感谢guy的回答:DThanks,写得很漂亮,但在awk中似乎根本不起作用。@BenCoughlan如果可以包含示例输入和预期输出,人们回答起来会容易得多。您提供的awk纸条似乎包含一些可以避免的额外行。输入非常通用,但在上面。非常感谢@nu11p01n73R,这是一个非常棒的教程。再次感谢:DThanks,写得很漂亮,但它在awk中似乎根本不起作用。@BenCoughlan如果您能包括include和example输入以及预期输出,人们回答起来会容易得多。您提供的awk纸条似乎包含一些可以避免的额外行。输入非常通用,但在上面。非常感谢@nu11p01n73R,这是一个非常棒的教程。再次感谢:D