0

次の形式のテキスト ファイルがあります。

0.000561859 100.001 0.724805
0.000994887 99.999 0.724788
0.0012519 100.002 0.724732
0.00138511 99.9941 0.724614
.
.
.

テーブルの最初の列に、3 番目の列の最初の値から取得した定数値があるテーブルを生成したいとします。

0.724805 0.000561859 100.001 0.724805
0.724805 0.000994887 99.999 0.724788
0.724805 0.0012519 100.002 0.724732
0.724805 0.00138511 99.9941 0.724614
.
.
.

Linuxでbashを使用してこれを行うにはどうすればよいですか?

4

4 に答える 4

5

awk最初の行の 3 番目の値の値を保存し、それをすべての行に沿って印刷する場合に適したオプションです。

$ awk 'NR==1 {v=$3}{print v,$0}' file
0.724805 0.000561859 100.001 0.724805
0.724805 0.000994887 99.999 0.724788
0.724805 0.0012519 100.002 0.724732
0.724805 0.00138511 99.9941 0.724614

説明

  • NR行数を指します。したがって、行番号 1 の場合NR==1 {v=$3}、3 番目の値の値が変数に格納vされます。したがって、この条件は 1 回だけ実行され、1 行目が読み取られます。
  • 値が に格納されるvと、行が読み取られるたびに、行v全体 ( $0) が追加されて出力され{print v,$0}ます。したがって、この条件はすべての行で実行されます。
于 2013-07-16T11:06:41.047 に答える
3

これはトリックを行います:

$ awk 'NR==1{a=$3}{print a,$0}' file 
0.724805 0.000561859 100.001 0.724805
0.724805 0.000994887 99.999 0.724788
0.724805 0.0012519 100.002 0.724732
0.724805 0.00138511 99.9941 0.724614
于 2013-07-16T11:09:45.370 に答える
1

Perl ソリューション:

perl -ne 'chomp; $p=(split)[2] unless defined $p; print "$p $_\n"' file

または(グレン・ジャックマンが提案するように、さらにPerlマジックを使用して

perl -lne '$p //= (split)[2]; print "$p $_"' file

出力:

0.724805 0.000561859 100.001 0.724805
0.724805 0.000994887 99.999 0.724788
0.724805 0.0012519 100.002 0.724732
0.724805 0.00138511 99.9941 0.724614
...
于 2013-07-16T11:22:27.413 に答える
1
awk -v r=1 -v c=3 '{a[NR]=$0}NR==r{p=$(c)}END{for(i=1;i<=NR;i++)print p,a[i]}' file

この行では、r(行) とc(列) を変更するだけで、対応する出力が得られます。たとえば、行 20 の 3 列目では、 を設定しr=20 and c=3ます。問題の例では、出力は次のとおりです。

0.724805 0.000561859 100.001 0.724805
0.724805 0.000994887 99.999 0.724788
0.724805 0.0012519 100.002 0.724732
0.724805 0.00138511 99.9941 0.724614
于 2013-07-16T11:08:12.383 に答える