Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于最终记录的特殊AWK命令_Awk - Fatal编程技术网

用于最终记录的特殊AWK命令

用于最终记录的特殊AWK命令,awk,Awk,我使用下面的脚本来计算排序集中的唯一字符串 awk '{if (p==$1) print 0,p;else print 1,p} {p=$1}' 1.txt > 2.txt Input a a a b c c d d d output 0 a 0 a 1 a 1 b 0 c 1 c 0 d 0 d 0 d 我使用1来指定一个唯一集合何时结束,一个新集合何时开始,但是awk不会将1添加到最后一个集合中,因为没有下一行可与之比较。当没有下一行时,我有没有办法指定一种特殊的行为 目前,我正

我使用下面的脚本来计算排序集中的唯一字符串

awk '{if (p==$1) print 0,p;else print 1,p} {p=$1}' 1.txt > 2.txt

Input
a
a
a
b
c
c
d
d
d

output
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
0 d
我使用1来指定一个唯一集合何时结束,一个新集合何时开始,但是awk不会将1添加到最后一个集合中,因为没有下一行可与之比较。当没有下一行时,我有没有办法指定一种特殊的行为

目前,我正在添加以下shell脚本来处理这个问题,但我想在awk脚本中找到一种方法

lines=`wc -l sort.txt| cut -d " " -f 1`
awk -v a=$lines '{if (p==$1) print 0,p;if (p!=$1||NR==a) print 1,p} {p=$1}' sort.txt > index.txt

当awk处理完所有输入(或被告知退出)时,您可以使用
END{…}
块来执行操作。

当awk处理完所有输入(或被告知退出)时,您可以使用
END{…}
块来执行操作。

您可以使用
END{…}
块在awk处理完所有输入(或被告知退出)后执行操作。

当awk处理完所有输入(或被告知退出)后,您可以使用
结束{…}
块执行操作。

您可能想更改打印内容:

awk '{if (p==$1) print 0,$1;else print 1,$1} {p=$1}' 1.txt

您可能希望更改打印内容:

awk '{if (p==$1) print 0,$1;else print 1,$1} {p=$1}' 1.txt

您可能希望更改打印内容:

awk '{if (p==$1) print 0,$1;else print 1,$1} {p=$1}' 1.txt

您可能希望更改打印内容:

awk '{if (p==$1) print 0,$1;else print 1,$1} {p=$1}' 1.txt

我能够让这个脚本工作

awk 'BEGIN{p=$1}{if ($1==p) print 0,p;if (p!=$1&&p!="") print 1,p} {p=$1}END{print 1,p}' 1.txt


input 
a
a
a
b
c
c
d
d
d


output
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

我能够让这个脚本工作

awk 'BEGIN{p=$1}{if ($1==p) print 0,p;if (p!=$1&&p!="") print 1,p} {p=$1}END{print 1,p}' 1.txt


input 
a
a
a
b
c
c
d
d
d


output
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

我能够让这个脚本工作

awk 'BEGIN{p=$1}{if ($1==p) print 0,p;if (p!=$1&&p!="") print 1,p} {p=$1}END{print 1,p}' 1.txt


input 
a
a
a
b
c
c
d
d
d


output
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

我能够让这个脚本工作

awk 'BEGIN{p=$1}{if ($1==p) print 0,p;if (p!=$1&&p!="") print 1,p} {p=$1}END{print 1,p}' 1.txt


input 
a
a
a
b
c
c
d
d
d


output
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

这将在最后一个字母处打印
1

awk 'NR>1 {print p==$1?0 FS p:1 FS p} {p=$1} END {print 1,$0}' file
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

这将在最后一个字母处打印
1

awk 'NR>1 {print p==$1?0 FS p:1 FS p} {p=$1} END {print 1,$0}' file
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

这将在最后一个字母处打印
1

awk 'NR>1 {print p==$1?0 FS p:1 FS p} {p=$1} END {print 1,$0}' file
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d

这将在最后一个字母处打印
1

awk 'NR>1 {print p==$1?0 FS p:1 FS p} {p=$1} END {print 1,$0}' file
0 a
0 a
1 a
1 b
0 c
1 c
0 d
0 d
1 d


不太清楚您想要什么,因为您的输入文件没有返回输出部分指示的内容。你能核对一下吗?据我所知,他的输入和输出是一致的。他正在为每行预加一个0或1。@fedorqui感谢您的关注。我没有打印我的第一行,因为同样的问题阻止我打印最后一行。不太清楚您想要什么,因为您的输入文件没有返回输出部分指示的内容。你能核对一下吗?据我所知,他的输入和输出是一致的。他正在为每行预加一个0或1。@fedorqui感谢您的关注。我没有打印我的第一行,因为同样的问题阻止我打印最后一行。不太清楚您想要什么,因为您的输入文件没有返回输出部分指示的内容。你能核对一下吗?据我所知,他的输入和输出是一致的。他正在为每行预加一个0或1。@fedorqui感谢您的关注。我没有打印我的第一行,因为同样的问题阻止我打印最后一行。不太清楚您想要什么,因为您的输入文件没有返回输出部分指示的内容。你能核对一下吗?据我所知,他的输入和输出是一致的。他正在为每行预加一个0或1。@fedorqui感谢您的关注。我没有打印我的第一行,因为同样的问题使我无法打印最后一行。我尝试过这一方法,但每次都只会复制最终记录(1的值现在为1美元)。有什么办法吗?我看你已经明白了。是的,你只需要手动“关闭”你在
END
块中最后看到的字段。我已经尝试过了,但每次都是重复最后的记录(现在1的值是$1)。有什么办法吗?我看你已经明白了。是的,你只需要手动“关闭”你在
END
块中最后看到的字段。我已经尝试过了,但每次都是重复最后的记录(现在1的值是$1)。有什么办法吗?我看你已经明白了。是的,你只需要手动“关闭”你在
END
块中最后看到的字段。我已经尝试过了,但每次都是重复最后的记录(现在1的值是$1)。有什么办法吗?我看你已经明白了。是的,你只需要手动“关闭”你在
END
块中最后一次看到的字段。如果我们在打高尔夫:
awk'{$2=$1;$1=p!=$2;p=$2}1'
你能想出一种方法让1位于集合的末尾而不是开始吗?只要把$2设置为0/1值:
awk'{$2=p!=$1;p=$1}1'
或者更容易理解的是
awk'{(p==$1){$2=0}其他{$2=1};p=$1;print}'
--或者如果有其他字段,而不是
$2
使用
$(NF+1)
如果我们在打高尔夫:
awk'{$2=$1;$1=p!=$2;p=$2}1'
你能想出一种方法让1位于集合的末尾而不是开始吗?只要将$2设置为0/1的值即可{$2=p!=$1;p=$1}1'或更易懂的
awk'{if(p==1){$2=0}其他{$2=1};p=$1;print}'
——或者如果有其他字段,而不是
$2
使用
$(NF+1)
如果我们在打高尔夫:
awk'{$2=$1;$1=p!=$2;p=$2}1'
你能想出一种方法让1位于集合的末尾而不是开头吗?只需将$2设置为0/1值:
awk'{$2=p!=$1;p=$1}1'
或者更容易理解的
awk'{if(p==1){$2=0}else{$2=1};p=$1;print}'
--或者如果有其他字段,而不是
$2
使用
$NF 1)
如果我们在打高尔夫:
awk'{$2=$1;$1=p!=$2;p=$2}1'
你能想出一种方法让1在集合的末尾而不是开始吗?只要把$2设置为0/1值:
awk'{$2=p!=$1;p=$1}1'
或者更容易理解的方法是
awk'{If(p=$1){$2=0}else$2=1;p}$1}“
--或者如果有其他字段,则使用
$(NF+1)