bash:割り当てられた値をファイルに追加する方法

bash:割り当てられた値をファイルに追加する方法

ディレクトリ内の複数のファイルを繰り返すbashスクリプトがあります。ファイル識別子は変数として保存されます$num。私が望むのは、$num次の例に示すように、私のデータに別の列を追加することです。

オリジナル入力:

A B C D E
2 79 56 SD L
1 09 67 JK S
9 60 37 KD G
0 10 47 SO E

予想出力:

A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1

*上記の例では$num= 1

最終的に私はループされた各ファイルから行のサブセットを取り、1つの大きなファイルに入れたいと思います。その行がどのファイルから来たのかを知るには、その行のソースIDが必要です$num

試してみましたがawk '{$12 = $num}' filenameまったく動作しません。

助けてください!

答え1

試してみてください(awkは1行でこれを行うことができます)

 id=...
 awk -v id=$id 'NR==1 { x=NF+1 ; $x = "id" ; print ; }
                NR > 1 { x=NF+1 ; $x = id ; print ; } ' file > new_file

どこ

  • -v id=$id IDをシェルからawkに貼り付けます。 IDに興味深い文字がある場合は、次を使用してください。-v id="îd"
  • NR == 1NR > 1最初の行を選択し、別の行を選択します。
  • { x=NF+1 ; $x = id ; print ; }$idプッシュ(awkのID)

答え2

次のsedスクリプトでは、フィールド区切り文字が空白であると仮定します。タブの場合は、s///2つのsedコマンドのスペースを\t

最初の行がid追加され、2番目と後の行が追加さ$numれます。

$ num=1
$ sed -e "1 s/$/ id/ ; 2,$ s/$/ $num/" input.txt 
A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1

関連情報