1

マイbashコマンドは、これは私のコードAwkのスクリプト(bashの)に

{z=0 
for(i=2;i<17;i++) 
    if ($i=="y") 
     z++ 
print $1 " " z} 

ある

awk -f code.txt input.txt 

ですこれは私の入力である

AaA y n y n y n n n y n n n n n y 
BbB n y y n n n n n n n n n n n n 

私の出力は

する必要があります
AaA 5 
BbB 2 

はまだそれが

AaA 4 
BbB 2 

コードをいじりの後、ラインの最後のシンボルを登録していないようです。

{z=0 
for(i=2;i<18;i++) 
     print $i 
print $1 " " z} 

これを実行すると、すべてy/nが出力されるため、問題はif文のどこかにある必要があります。

答えて

2

入力ファイルにMS-DOS行末(CRLF)がある場合があります。最後の記号はy<CR>となります。これが真であるかどうかを確認するには、Linuxシステム上で使用すると、

hexdump -C input.txt 
+0

これは私のhexダンプです: '00000000 41 61 41 20 79 20 6e 20 79 20 6e 20 79 20 6e 20 | AaA y n y n y n | 00000010 6e 20 6e 20 79 20 6e 20 6e 20 6e 20 6e 20 6e 20 | n n y n n n n n n | 00000020 79 0d 0a 42 62 42 20 6e 20 79 20 79 20 6e 20 6e | y..BbB n y y n n | 00000030 20 6e 20 6e 20 6e 20 6e 20 6e 20 6e 20 6e 20 6e | n n n n n n n n | * 00000044' –

+0

ヘックスダンプを質問に貼り付け、コードとして書式を設定すると、読みやすくなります。 –

+1

'0d 0a'が問題です。' 0a'しかないはずです。 'dos2unix input.txt'を使ってawkスクリプトをやり直してみてください。 – Cyrus

0

を実行することができます問題はCRLFにあるように見えました。あなたはawkループでそれを修正することができます

sub(/\r/,"",$NF) 
sub(/\r/,"",$NF) 

ieです。最後のフィールドからCR(何も置き換えない)を削除します。また、あなたがy発生をカウントするためのものsubまたはgsubを使用することができます。私たちは自分自身(&)とyを置き換えるよう

$ awk '$0=$1 OFS gsub(FS "y","&")' file 
AaA 5 
BbB 2 

この道を\rは重要ではありません。

関連する問題