1

一連の数字を含むテキスト ファイルがあります。

1 2 4 2 2 6 3 4 7 4 4 8 2 4 6 5 5 8

3 つおきのフィールドに 3 を掛ける必要があるため、出力は次のようになります。

1 2 12 2 2 18 3 4 21 4 4 24 2 4 18 5 5 24

さて、私はすでに解決策を打ち出しましたが、より迅速でエレガントな解決策があることを知っています。これが私が仕事をするようになったものです:

xargs -n1 < input.txt | awk '{printf NR%3 ? "%d " : $0*3" ", $1}' > output.txt

awkこれを行うことができるワンライナーが必要だと思いますか?? awk(各レコードではなく) 各フィールドを確認するにはどうすればよいでしょうか。したがってxargs、すべてのフィールドを別の行に配置するために を呼び出す必要はありません。それともsedできるかな?

4

2 に答える 2

4

この行も機能します:

awk -v RS="\\n| " -v ORS=" " '!(NR%3){$0*=3}7' file
于 2013-08-29T21:59:59.960 に答える
4

試す:

awk '{for (i=3;i<=NF;i+=3)$i*=3; print}' input.txt > output.txt

これはまだテストしていません (iPod に投稿)。パラメータのprintないコマンドは、(部分的に変更された) 行全体を出力する必要があります。出力のセパレーターとして空白を取得するにOFS=" "は、セクションで設定する必要がある場合があります。BEGIN

于 2013-08-29T21:45:20.117 に答える