ファイルから読み込み、ループを使用して新しい行を返します。

ファイルから読み込み、ループを使用して新しい行を返します。

このようなファイルがあります。

foo.txt

xxx B=C     D: A
yyy F=H     D:A
zzz K=L     D:  A
fff M=H     D:/llll
kkk S=D     D: /kkkkk

それが私が言いたいことです。

xxx B=C;     D: A           ;pass
yyy F=H;     D:A            ;pass
zzz K=L;     D:  A          ;pass
fff M=H;     D:/llll        ;try
kkk S=D;     D: /kkkkk/bb   ;try

「D:」で始まる行の2番目の部分が「/」で始まる場合は「try」と書く必要があり、そうでない場合は各行の行の末尾に「pass」と書く必要があります。

このようにファイルを読み取ることはできますが、空白があります。それは別の問題です。

また、「D:」の前には常に「A」または「/」が付いています。

whileループを試しましたが、成功しませんでした。

cat /tmp/foo.txt | cut -d ":" -f,2

出力

 A      (one empty space)
A       (none)
   A    (three empty space)
/llll   (none)
 /kkkkk/bb (two empty space)

以下は私が試した例です。

while read -r line;
do 
if [[ $line ]]; then
          echo $line "try"
else
          echo $line "pass" 
fi
done < foo.txt

ベストアンサー1

あなたはそれを使用することができますawk、これはあなたが望むものを簡単に得ることができます。

awk '!/D: *\//{print $0 " ;pass"; next} {print $0 " ;try"}' foo.txt

出力:

xxx B=C     D: A ;pass
yyy F=H     D:A ;pass
zzz K=L     D:  A ;pass
fff M=H     D:/llll ;try
kkk S=D     D: /kkkkk ;try

これは基本的にすべての行と一致します。含まれていません D:/そこに追加して;pass次の行にジャンプしてください。それ以外の場合は追加されます;try

おすすめ記事