次の問題を解決するにはシェルスクリプトが必要です
elecj_test: |1009676|F|269.13348200|3|348415|237.06|0.00|0.00|||SSPPPSSSPSSS|UNTESTED||
行が次から始まる場合電子テスト:そして||次に交換する必要があります。|
その間にスペースがあります。|
見つかったら、行の真ん中にあります。||交換できず、行末でのみ可能です。
答え1
そしてアッ、パイプをフィールドセパレータとして使用します。
- 最初のフィールドが「elecj_test:」と等しいか、最後のフィールドが空であるか、最後に2番目のフィールドが空であるかをテストします。
- trueの場合、最後から2番目のフィールドを空白に設定します。
awk '
BEGIN { FS = OFS = "|" }
$1 == "elecj_test: " && $NF == "" && $(NF - 1) == "" {
$(NF - 1) = " "
print
}
' file
elecj_test: |1009676|F|269.13348200|3|348415|237.06|0.00|0.00|||SSPPPSSSPSSS|UNTESTED| |
答え2
||
以下は、必要に応じてエンディングを編集するsedコマンドです。
sed -n 's/^\(elecj_test:.*|\)|$/\1 |/p'
"elecj_test:"で始まり、"||"で終わる行を一致させ、最後の"|"までの行を括弧でキャプチャし、それをキャプチャされた文字列に置き換え、その後にスペースと"|"が続きます。編集した行を印刷します。
さまざまな開始/終了文字列に対応するためにパラメータ化されていないため、品質の良い回答ではありませんが、迅速なワンタイムコマンドが必要になる場合があります。