作業例:
オリジナル:
% echo -e "This is number 800 with decimal;other stuff\n44333; more data"
This is number 800 with decimal;other stuff
44333; more data
欲しいawk結果:
% echo -e "This is number 800 with decimal;other stuff\n44333; more data" | awk
;other stuff
; more data
更新:すべての回答後:区切り記号 ";"は行ごとに1回だけ存在し、行が存在する場合は存在するため、私の解決策は常に機能しますが、他の解決策ほど一般的ではありません(空白行、区切り文字なしの行、または複数の区切り文字がある行)。
答え1
すべての Unix システムのすべてのシェルで awk または sed を使用します。
awk '{sub(/[^;]*/,"")}1' file
sed 's/[^;]*//' file
ただし、上記のコードはそれを含まないすべての行に対して空の行を印刷するため、これらの行が入力に存在できる;
場合は、次のものが必要になる場合があります。
awk '{sub(/[^;]*;/,";")}1' file
sed 's/[^;]*;/;/' file
上記は、;
sを含まない行をそのまま印刷するか、その行を削除したいとします。
awk 'sub(/[^;]*;/,";")' file
sed -n 's/[^;]*;/;/p' file
答え2
awk -F ';' 'BEGIN { OFS=FS } { $1 = "" }; 1'
次に、各行の - で区切られたフィールドを読み取り、;
最初のフィールドを空の文字列に設定します。その後、すべての行は無条件出力フィールド区切り文字として出力されます(孤立した行が1
最後に実行する操作)。;
あなたの質問にデータが与えられたら
;other stuff
; more data
別のテスト:
$ cat file
123;456;789
a b c ; d e f ; g h i
abba
;;;;
$ awk -F ';' 'BEGIN { OFS=FS } { $1 = ""; print }' file
;456;789
; d e f ; g h i
;;;;
答え3
表示された例を使用して、次のawk
コードを試してください。
echo -e "This is number 800 with decimal;other stuff\n44333; more data" |
awk 'match($0,/^[^;]*/){ print substr($0,RSTART+RLENGTH)}'
;other stuff
; more data
答え4
シンプル
% echo -e "This is number 800;other stuff\n44333; more data" | awk -F';' '{print ";"$2}'
;other stuff
; more data