ディレクトリ内の複数のファイルを繰り返す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 == 1
、NR > 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