gpt4 book ai didi

unix ksh 如何打印 $1 和 $2 的前 n 个字符

转载 作者:行者123 更新时间:2023-12-01 23:22:13 26 4
gpt4 key购买 nike

我有一个文件如下:

$ cat /etc/oratab  
hostname01:DBNAME11:/oracle_home/A_19.0.0.0:N
hostname01:DBNAME1_DC:/oracle_home/A_19.0.0.0:N
hostname02:DBNAME21:/oracle_home/B_19.0.0.0:N
hostname02:DBNAME2_DC:/oracle_home/B_19.0.0.0:N

当第三列与字符串“19.0.0”匹配时,我想打印第一列的唯一值、第二列的前 6 个字符和第三列。

我想看到的输出是:

hostname01:DBNAME1:/oracle_home/A_19.0.0.0
hostname02:DBNAME2:/oracle_home/B_19.0.0.0

我将这段代码放在一起,但看起来这不是正确的方法。

cat /etc/oratab|grep "19.0.0"|awk '{print $1}' || awk -F":" '{print subsrt($2,1,8)}

抱歉,我是 shell 脚本的新手

最佳答案

第一个解决方案:使用您显示的示例,请尝试使用 GNU awk 编写和测试。

awk 'BEGIN{FS=OFS=":"} {$2=substr($2,1,7)} !arr[$1,$2]++ && $3~/19\.0\.0/{NF--;print}' Input_file


第二个解决方案: 或者,如果您的 awk 不支持 NF--,请尝试执行以下操作。

awk '
BEGIN{
FS=OFS=":"
}
{
$2=substr($2,1,7)
}
!arr[$1,$2]++ && $3~/19\.0\.0/{
$4=""
sub(/:$/,"")
print
}
' Input_file

解释: 简单的解释就是,将字段分隔符和输出字段分隔符设置为:。然后在主程序中,将第 2 个字段设置为其值的第 7 个字符。然后检查条件是否是唯一的(之前没有出现过)并且第 3 个字段类似于 19.0.0,减少 1 个字段并打印该行。

关于unix ksh 如何打印 $1 和 $2 的前 n 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67926303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com