複数のファイルのx(2)列の数字の符号を反転したいと考えています。たとえば、次のように数字の符号を変更する+/-複数のファイル
1から| 2.0
2 | -3.0
3 | -2.0
2 | | 3.0
3 | 1.0
1 -1.0
私はsed '/^-/ {s/.//;b};s/^/-/'
fileコマンドを使用していますが、それはしません作業。なにか提案を?
複数のファイルのx(2)列の数字の符号を反転したいと考えています。たとえば、次のように数字の符号を変更する+/-複数のファイル
1から| 2.0
2 | -3.0
3 | -2.0
2 | | 3.0
3 | 1.0
1 -1.0
私はsed '/^-/ {s/.//;b};s/^/-/'
fileコマンドを使用していますが、それはしません作業。なにか提案を?
awk
を使用すると、実際の数式を使用してより適切な方法が簡単になります。たとえば、あなたが列2と3を否定したい場合:
awk '{print $1, -$2, -$3}'
私はawk '{print $ 1、 - $ 2、 - $ 3}' old_file> new_fileを使っていました。しかし、私は複数のファイルには適用できません。 – user3527941
私はawkでどのようにループするべきですか? – user3527941
@ user3527941:awkではなく、シェルをループします。たとえば、bashに "while"や "for"ループを書いてください。 –
perl
場所で別の列または別の区切り文字
$ sed -E '/^(.*\|\s*)-[0-9]/ {s/^(.*\|\s*)-/\1/;b}; s/^(.*\|\s*)/&-/' ip.txt
1 | -2.0
2 | 3.0
3 | -1.0
のために変更するのに適していない、OPからsed
コマンドを変更
$ cat ip.txt
1 | 2.0
2 | -3.0
3 | 1.0
区切り文字を指定して特定の列を変更する方が簡単です
$ perl -F'\|' -lane '$F[1] =~ m/-/ ? $F[1] =~ s/-// : $F[1] =~ s/\d/-$&/; print join "|", @F' ip.txt
1 | -2.0
2 | 3.0
3 | -1.0
は-i
オプション
sed -i -E '/^(.*\|\s*)-[0-9]/ {s/^(.*\|\s*)-/\1/;b}; s/^(.*\|\s*)/&-/' *
と
perl -i -F'\|' -lane '$F[1] =~ m/-/ ? $F[1] =~ s/-// : $F[1] =~ s/\d/-$&/; print join "|", @F' *
番号の形式が問題でない場合は
$ perl -F'\|' -lane '$F[1] = -$F[1]; print join "|", @F' ip.txt
1 |-2
2 |3
3 |-1
コマンドあなたを使用し、インプレースフォルダ内の複数のファイルを変更するにはGNU sedで私の作品を提供しました。あなたが得た成果は?あなたのsed版は何ですか? – Sundeep
私の出力は変わりません。ファイルの第5列を変更したいのですが、 – user3527941
と出力が変更されるべき場所はどこですか? – Sundeep