解析具有多个条件的文件

解析具有多个条件的文件

我想创建一个脚本来解析文件。这些是我需要做的;

  1. 我只想获取每个应用程序的第一行。我只想检查第 1,3,4 列。如果一个应用程序有多个实例,我只想要第一个。对于exp。 THSMOB11 将被选中,但 THSMOB12 将被评论。 THSINT11 选择了 THSINT12 发表评论。
  2. 我想在我不想使用的其他行前面添加“#”。

示例文本

应用程序名称 频道文件夹实例
此服务业务此此bcr1 THSMOB11
此服务业务此Thisbin1 THSINT11
此服务业务此此bbr1 THSBRC11
此服务业务此此机器人1 THSIVR11
此服务业务此此adm1 THSWS11
此服务业务此此bcr1 THSMOB12
此服务业务此Thisbin1 THSINT12
此服务业务此此bbr1 THSBRC12
此服务业务此此bbr1 THSBRC13

我从这段代码开始。

#!/bin/ksh

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
done < "$1"

预期结果;

此服务业务此此bcr1 THSMOB11
此服务业务此Thisbin1 THSINT11
此服务业务此此bbr1 THSBRC11
此服务业务此此机器人1 THSIVR11
此服务业务此此adm1 THSWS11
#ThisServicesBusiness 这个Thisbcr1 THSMOB12
#ThisServicesBusiness 这个 Thisbin1 THSINT12
#ThisServicesBusiness 这个 Thisbbr1 THSBRC12
#ThisServicesBusiness 这个 Thisbbr1 THSBRC13

答案1

Awk更适合这种情况:

awk 'a[$1]++{ $0="#"$0 }1' file
  • a[$1]++{ $0="#"$0 }- 关联数组a将保存每个的出现次数“应用程序名称”(由第 1 场提出$1)使用“应用程序名称”作为数组键。从第二次出现开始,整个记录将以char$0开头#

输出:

App1 Channel1 Name1 Folder1
#App1 Channel1 Name2 Folder1
App2 Channel1 Name1 Folder1
#App2 Channel1 Name1 Folder1
App3 Channel1 Name1 Folder1
App4 Channel1 Name1 Folder1
#App1 Channel2 Name1 Folder1
#App1 Channel3 Name1 Folder1
#App1 Channel1 Name1 Folder2

相关内容