このようなファイルがあります。
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
。