ファイルを解析するスクリプトを作成したいと思います。これが私がすべきことです。
- 私は各アプリケーションの最初の行を取得したいと思います。 1,3,4列だけ確認したいです。アプリケーションの複数のインスタンスがある場合は、最初のインスタンスのみが必要です。特急用。 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 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