我有这个输入
array='2 0.00000 -1.45191
6 0.81778 -0.63413
10 0.85020 -0.60170
8 1.40260 -0.04931
22 3.25781 1.80590
20 4.32051 2.86860
6 0.00000 -0.93906
18 0.07618 -0.86288
8 0.36922 -0.56984
12 0.71195 -0.22711
16 0.88517 -0.05389'
我正在尝试复制相同的数组,但如下所示,
2 0.00000 -1.45191
6 0.81778 -0.63413
10 0.85020 -0.60170
8 1.40260 -0.04931
22 3.25781 1.80590
20 4.32051 2.86860
6- 0.00000 -0.93906
18- 0.07618 -0.86288
8- 0.36922 -0.56984
12- 0.71195 -0.22711
16- 0.88517 -0.05389
$1
不同之处在于,使用第二0.00000
个字段的第二个值$2
作为指示符,为第一个字段的第二部分添加后缀。如果可以使用该awk
命令,我会很高兴。
根据您的示例,您似乎想要做的是在第二列中保留字符串
0.00000
(或可能是数值0
)的出现次数,并在计数达到 2 时附加-
到第一列的值:但是,这会将满足条件的记录中的列分隔符替换为默认(单个空格)输出分隔符。如果您的输入分隔符是空格字符序列,那么保持对齐的一种方法是将第一个空格字符替换为
-
:我们可以用
awk
它来解决它:,
$2 ~ /^0\.0+$/ && ++k==2
GNU sed
在扩展正则表达式模式下使用(-E
) 来简化正则表达式的编写:/^[^\t]+\t+0\.0+(\t|$)/
选择第二个字段为零的行。输出:
根据你之前的问题,我怀疑你有制表符分隔的输入,所以试试这个:
以上还假设如果第
0
2 列中出现第 3 个或后续,您仍希望在-
第 1 列中附加 s。