我想创建一个脚本来解析文件。这些是我需要做的;
- 我只想获取每个应用程序的第一行。我只想检查第 1,3,4 列。如果一个应用程序有多个实例,我只想要第一个。对于exp。 THSMOB11 将被选中,但 THSMOB12 将被评论。 THSINT11 选择了 THSINT12 发表评论。
- 我想在我不想使用的其他行前面添加“#”。
示例文本
应用程序名称 频道文件夹实例 此服务业务此此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