web-dev-qa-db-ja.com

ファイルに新しい列を追加する

Awkコードを含むファイルに新しい列を追加するにはどうすればよいですか?

original.file

F1 F2 F3 ..F10 

f11をoriginal.fileに追加します

F1 F2 F3 ..F10 F11
15
user951487

試してください:

awk 'BEGIN{getline to_add < "f3"}{print $0,to_add}' f

ファイル「f3」から追加する列を読み取り、変数to_addに保存します。その後、ファイルfの各行に列を追加します。

HTHクリス

7
Chris

awk '{print $0, "F11"}' original.file

19
nick

ファイルに列を追加する場合は、次の操作を実行できます。

remark:フィールド区切り文字FSは、文字列"fs"と等しいと想定しています。これを何にでも置き換えることができます。または、フィールドの区切り文字として<空白>を使用するだけの場合は、次のソリューションのBEGIN{FS=OFS="fs"}の部分を削除できます。

最初に列を追加:

awk 'BEGIN{FS=OFS="fs"}{print value OFS $0}' file

最後に列を追加:

awk 'BEGIN{FS=OFS="fs"}{print $0 OFS value}' file

列の前に列を追加n

awk 'BEGIN{FS=OFS="fs"}{$n = value OFS $n}1' file

列の後に列を追加n

awk 'BEGIN{FS=OFS="fs"}{$n = $n OFS value}1' file

各列の前に列を追加n1 <n2 <... <nm(後ろから開始)

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,",")}
     {for(i=m;i>0;--i) $(a[i]) = value OFS $(a[i])}1' file

または別の値

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,","); split("value1,value2,...,valuem",v,",")}
     {for(i=m;i>0;--i) $(a[i]) = v[i] OFS $(a[i])}1' file

各列の後に列を追加n1 <n2 <... <nm(後ろから開始)

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,",")}
     {for(i=m;i>0;--i) $(a[i]) = $(a[i]) OFS value}1' file

または別の値

awk 'BEGIN{FS=OFS="fs"; split("n1,n2,n3,...,nm",a,","); split("value1,value2,...,valuem",v,",")}
     {for(i=m;i>0;--i) $(a[i]) = $(a[i]) OFS v[i]}1' file
4
kvantour