0

データ:

Sandnes<space>gecom<tab>Hansen<tab>Ola<space>Timoteivn<space>10

特定の列 (例: 2 列目) の値をファイル内の変数に置き換えています。だから私はコマンドを使用しています:

varz="zipval"
awk -v  VAR=$varz '{$2=VAR}1' OutputFile.log

awk は、処理後にすべてのタブをスペースに置き換えます。だから私は OFS="\t" を使用しました。

ただし、タブへのすべてのスペースを削除します Sandnes<tab>gecom<tab>Hansen<tab>zipval<tab>Timoteivn<tab>10

それを処理する方法。ありがとう

4

4 に答える 4

2

あなたの問題は、 awk が入力を分割してからorFS=[ \t]+で再アセンブルすることです。余分な分割を回避できるとは思いません。このようなものは動作します:OFS=' 'OFS='\t'

<data awk -v VAR="$varz" 'BEGIN { FS=OFS="\t" } { split($1, a, " +"); $1 = a[1]" "VAR } 1'

出力:

Sandnes zipval^IHansen^IOla Timoteivn 10
于 2012-11-29T07:53:18.407 に答える
1

次のスクリプトを使用して、列番号を awk スクリプトに渡します。

varz="zipval"
awk -v VAR=$varz -v N=6 '{sub($N, VAR)}1' OutputFile.log
于 2012-11-29T06:05:03.403 に答える
0

希望する出力を投稿したり、置換したい特定のテキストを教えたりしなかったため(「2番目のフィールド」はいくつかのことを意味する可能性があります)、これは推測ですが、入力ファイルがタブ区切りのフィールドであると仮定すると、引用する必要がありますシェル変数を指定し、FS と OFS を割り当てます。

varz="zipval"
awk -v VAR="$varz" 'BEGIN{FS=OFS="\t"} {$2=VAR} 1' OutputFile.log

また、awk 組み込み変数 (NR、NF など) を識別するために使用されるため、変数名にすべて大文字を使用しないことをお勧めします。

于 2012-11-29T13:46:27.050 に答える
0

以下は私の場所でうまく機能しています:

> setenv var "hi"
> echo "1 2 3 4 5 6 7" | awk -v var1=$var '{$6=var1}1'
1 2 3 4 5 hi 7
> 
于 2012-11-29T06:14:17.987 に答える