複数の条件を持つファイルの解析

複数の条件を持つファイルの解析

ファイルを解析するスクリプトを作成したいと思います。これが私がすべきことです。

  1. 私は各アプリケーションの最初の行を取得したいと思います。 1,3,4列だけ確認したいです。アプリケーションの複数のインスタンスがある場合は、最初のインスタンスのみが必要です。特急用。 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 ThisThisbcr1 THSMOB12
#ThisServicesBusiness ThisThisbin1 THSINT12
#ThisServicesBusiness ThisThisbbr1 THSBRC12
#ThisServicesBusiness ThisThisbbr1 THSBRC13

答え1

Awkこの場合に適しています。

awk 'a[$1]++{ $0="#"$0 }1' file
  • a[$1]++{ $0="#"$0 }- 連想配列はaそれぞれの発生回数を保持します。「アプリケーション名」(フィールド1で発生$1)使用「アプリケーション名」配列キーで。 2回目以降、レコード全体は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

関連情報