次の情報表があります:
ko:K00624
ko:K20215
1.5.3.5
ko:K01106
2.3.41.5
次のような出力が欲しいです:
ko:K00624
ko:K20215
-
ko:K01106
-
次のコマンドを使用しましたが、機能しません。提案してください
cat filename | awk '{if($1!~"ko"); print "-") print }' | less
答え1
コマンドの修正可能なバージョンawk
:
awk '{if($1!~"ko") print "-"; else print }' filename
もっと口語的に言うと
awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename
または(短縮形)
awk '!/^ko/ {$0 = "-"} 1' filename
別の GNU のsed
代替手段 (c
コマンドではなく コマンドを使用s
):
sed '/^ko/!c-' filename
答え2
sed -e '/^ko/!s/.*/-/' input_file.dat
つまり、「ko」で始まらないすべての行については、その行全体をダッシュに置き換えてください。その他については、そのままにして変更せずに印刷します。
答え3
または....
~]$ echo -e "ko:K00624\nko:K20215\n 1.5.3.5\nko:K01106\n2.3.41.5" \
| while read line ; do if [[ $line =~ ko ]] ; then echo $line ; else echo "-" ; fi ; done
ko:K00624
ko:K20215
-
ko:K01106
-
答え4
これが私のsed
答えです。
sed s/^[^ko].*/-/g filename
ko
で始まっていないすべての行を-
. に置き換えるだけです (コメントとして追加したいのですが、まだ担当者がいません)。