0

2つのファイルを結合するためのawkコードがあり、「>>」を使用して結果をfile.txtの最後に追加します

私のコード

NR==FNR && $2!=0 {two[$0]++;j=1; next }{for(i in two) {split(i,one,FS); if(one[3] == $NF){x=$4;sub( /[[:digit:]]/, "A", $4); print j++,$1,$2,$3,x,$4 | "column -t" ">>" "./Desktop/file.txt"}}}

awkをbashスクリプトに入れて、最後にfile.txtを並べ替え、並べ替えた結果をもう一度file.txtに保存したい>

私はこれを試しました

#!/bin/bash
command=$(awk '{NR==FNR && $2!=0 {two[$0]++;j=1; next }{for(i in two) {split(i,one,FS); if(one[3] == $NF){x=$4;sub( /[[:digit:]]/, "A", $4); print $1,$2,$3,$4 | "column -t" ">>" "./Desktop/file.txt"}}}}')
echo -e "$command" | column -t | sort -s -n -k4 > ./Desktop/file.txt 

しかし、それは私にエラーを与えます"for reading (no such a file or directory)"

私の間違いはどこにありますか?

前もって感謝します

4

1 に答える 1

1

1)awkスクリプトの入力ファイルを指定していません。これ:

command=$(awk '{...stuff...}')

する必要があります:

command=$(awk '{...stuff...}' file1 file2)

2)awk条件「NR == ...」をアクションパーツ内に移動して、条件として動作しなくなるようにします。

3)awkスクリプトの出力は「file.txt」に入るので、次の行にエコーすると「コマンド」は空になります。

4)未使用の変数xとjがあります

5)引数FSを不必要にsplit()に渡します。

等...

私はあなたが欲しいものは次のとおりだと思います:

command=$( awk '
   NR==FNR && $2!=0 { two[$0]++; next }
   {
      for(i in two) {
          split(i,one)
          if(one[3] == $NF) {
             sub(/[[:digit:]]/, "A", $4)
             print $1,$2,$3,$4 
          }
      }
    }
' file1 file2 )
echo -e "$command" | column -t >> "./Desktop/file.txt"
echo -e "$command" | column -t | sort -s -n -k4 >> ./Desktop/file.txt

しかし、それを伝えるのは難しいです。

于 2012-10-22T18:28:21.077 に答える