キャリッジリターン(\ r)を含むステータス行を出力しすぎるプロセスがあります。パイピングにより、これらすべてのステータスバーをフィルタリングできます。
sed '/\r/d'
代わりに、3行を除くすべての行をフィルタリングしたいと思います。標準のUnixツール(awk?)を使用してこれを実行できますか?それともスクリプトが必要ですか? CRなしの行は変更されていないままにしてください。
与えられた出力:
$ (printf '%s\n' {1..10}; printf '%s\r\n' {1..10}; printf '%s\n' {1..10};) | cat -v
1
2
3
4
5
6
7
8
9
10
1^M
2^M
3^M
4^M
5^M
6^M
7^M
8^M
9^M
10^M
1
2
3
4
5
6
7
8
9
10
希望の出力(または他のパターン):
1
2
3
4
5
6
7
8
9
10
1^M
4^M
7^M
10^M
1
2
3
4
5
6
7
8
9
10
ベストアンサー1
$ awk '!(/\r$/ && ((++c)%3 != 1))' file | cat -v
1
2
3
4
5
6
7
8
9
10
1^M
4^M
7^M
10^M
1
2
3
4
5
6
7
8
9
10
元の答え:
awkを使うと必要なのはこれだけです。
awk -v RS='\r' '{ORS=(NR%10000 ? "" : RS)} 1'
たとえば、入力として使用する場合:
$ printf '%s\r\n' {1..10} | cat -v
1^M
2^M
3^M
4^M
5^M
6^M
7^M
8^M
9^M
10^M
3つを除いてすべて削除\r
:
$ printf '%s\r\n' {1..10} | awk -v RS='\r' '{ORS=(NR%3 ? "" : RS)} 1' | cat -v
1
2
3^M
4
5
6^M
7
8
9^M
10