2016/01/30 14:52:51:
最後の項目を除くすべての項目を削除しようとしています。私はこれを試しました:
awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
最後の項目を除くすべての項目を何もないものに置き換えます。ただし、これは2016/01/30 14:52:51:
わずかに異なる数字で4回だけ繰り返されます。
ベストアンサー1
このスクリプトにはいくつかの問題があり、問題の説明にはいくつかの説明が必要です。
- gsub呼び出しの無効な正規表現パラメータ
- アップデートは(ステートメントで使用されている値)には
$1
影響しません。$0
print
- OPは、行の最後のイベントを変更せずに維持することを意図したのか、それとも日付を含む最後の行だけを維持したいのか(後者がより可能性が高い)、はっきりと述べていません。
以下は、これらの修正と前提を含むスクリプトです。
#!/bin/sh
awk '
BEGIN { row=0; fixup = -1; }
{
before[row] = $0;
gsub("2016/01/30 14:52:51: ", "", $0);
if ( $0 != before[row] ) {
fixup = row;
}
after[row++] = $0;
}
END {
if (fixup >= 0) {
after[fixup] = before[fixup];
}
for (n = 0; n < row; ++n) {
print after[n];
}
}
'
(2つのアレイを使用することはあまり効率的ではありませんが、before
アレイを使用しないよりもさらに修正が簡単です)。
入力ファイル()を生成してfoo.in
これをテストしました。
1awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
2awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
3awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
4awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'
次のようにスクリプトを実行します。
./foo <foo.in
そして得た
1awk '{gsub(//,"",$1);print}'
2awk '{gsub(//,"",$1);print}'
3awk '{gsub(//,"",$1);print}'
4awk '{gsub(//,"2016/01/30 14:52:51: ",$1);print}'